郑州网站开发yipinpai,济南网络科技有限公司有哪些,软文网站有哪些,做理财的网站一、利用Shell命令与HDFS进行交互
在进行HDFS编程实践前#xff0c;需要首先启动Hadoop。可以执行如下命令启动Hadoop#xff1a;
cd /usr/local/hadoop
./sbin/start-dfs.sh #启动hadoop Hadoop支持很多Shell命令#xff0c;其中fs是HDFS最常用的命令#xff0c;利用fs…一、利用Shell命令与HDFS进行交互
在进行HDFS编程实践前需要首先启动Hadoop。可以执行如下命令启动Hadoop
cd /usr/local/hadoop
./sbin/start-dfs.sh #启动hadoop Hadoop支持很多Shell命令其中fs是HDFS最常用的命令利用fs可以查看HDFS文件系统的目录结构、上传和下载数据、创建文件等。
注意
本教程的命令是以”./bin/hadoop dfs”开头的Shell命令方式实际上有三种shell命令方式。1. hadoop fs2. hadoop dfs3. hdfs dfs
hadoop fs适用于任何不同的文件系统比如本地文件系统和HDFS文件系统hadoop dfs只能适用于HDFS文件系统hdfs dfs跟hadoop dfs的命令作用一样也只能适用于HDFS文件系统
我们可以在终端输入如下命令查看fs总共支持了哪些命令
./bin/hadoop fs 在终端输入如下命令可以查看具体某个命令的作用
例如我们查看put命令如何使用可以输入如下命令
./bin/hadoop fs -help put 1.目录操作
需要注意的是Hadoop系统安装好以后第一次使用HDFS时需要首先在HDFS中创建用户目录。本教程全部采用hadoop用户登录Linux系统因此需要在HDFS中为hadoop用户创建一个用户目录命令如下
cd /usr/local/hadoop
./bin/hdfs dfs -mkdir -p /user/hadoop
该命令中表示在HDFS中创建一个“/user/hadoop”目录“-mkdir”是创建目录的操作“-p”表示如果是多级目录则父目录和子目录一起创建这里“/user/hadoop”就是一个多级目录因此必须使用参数“-p”否则会出错。“/user/hadoop”目录就成为hadoop用户对应的用户目录可以使用如下命令显示HDFS中与当前用户hadoop对应的用户目录下的内容
./bin/hdfs dfs -ls .
该命令中“-ls”表示列出HDFS某个目录下的所有内容“.”表示HDFS中的当前用户目录也就是“/user/hadoop”目录因此上面的命令和下面的命令是等价的
./bin/hdfs dfs -ls /user/hadoop
如果要列出HDFS上的所有目录可以使用如下命令
./bin/hdfs dfs -ls
下面可以使用如下命令创建一个input目录
./bin/hdfs dfs -mkdir input
在创建个input目录时采用了相对路径形式实际上这个input目录创建成功以后它在HDFS中的完整路径是“/user/hadoop/input”。如果要在HDFS的根目录下创建一个名称为input的目录则需要使用如下命令
./bin/hdfs dfs -mkdir /input
可以使用rm命令删除一个目录比如可以使用如下命令删除刚才在HDFS中创建的“/input”目录不是“/user/hadoop/input”目录
./bin/hdfs dfs –rm –r /input
上面命令中“-r”参数表示如果删除“/input”目录及其子目录下的所有内容如果要删除的一个目录包含了子目录则必须使用“-r”参数否则会执行失败。
2.文件操作
在实际应用中经常需要从本地文件系统向HDFS中上传文件或者把HDFS中的文件下载到本地文件系统中。首先使用vim编辑器在本地Linux文件系统的“/home/hadoop/”目录下创建一个文件myLocalFile.txt里面可以随意输入一些单词比如输入如下三行
Hadoop
Spark
XMU DBLAB
然后可以使用如下命令把本地文件系统的“/home/hadoop/myLocalFile.txt”上传到HDFS中的当前用户目录的input目录下也就是上传到HDFS的“/user/hadoop/input/”目录下
./bin/hdfs dfs -put /home/hadoop/myLocalFile.txt input
可以使用ls命令查看一下文件是否成功上传到HDFS中具体如下
./bin/hdfs dfs -ls input
该命令执行后会显示类似如下的信息
Found 1 items
-rw-r--r-- 1 hadoop supergroup 36 2017-01-02 23:55 input/ myLocalFile.txt
下面使用如下命令查看HDFS中的myLocalFile.txt这个文件的内容
./bin/hdfs dfs –cat input/myLocalFile.txt
下面把HDFS中的myLocalFile.txt文件下载到本地文件系统中的“/home/hadoop/下载/”这个目录下命令如下
./bin/hdfs dfs -get input/myLocalFile.txt /home/hadoop/下载 可以使用如下命令到本地文件系统查看下载下来的文件myLocalFile.txt
cd ~
cd 下载
ls
cat myLocalFile.txt
最后了解一下如何把文件从HDFS中的一个目录拷贝到HDFS中的另外一个目录。比如如果要把HDFS的“/user/hadoop/input/myLocalFile.txt”文件拷贝到HDFS的另外一个目录“/input”中注意这个input目录位于HDFS根目录下可以使用如下命令
./bin/hdfs dfs -cp input/myLocalFile.txt /input 二、利用Java API与HDFS进行交互
Hadoop不同的文件系统之间通过调用Java API进行交互上面介绍的Shell命令本质上就是Java API的应用。下面提供了Hadoop官方的Hadoop API文档想要深入学习Hadoop可以访问如下网站查看各个API的功能。
Hadoop API文档http://hadoop.apache.org/docs/stable/api/
利用Java API进行交互需要利用软件Eclipse编写Java程序。
一在Ubuntu中安装Eclipse
Eclipse是常用的程序开发工具很多程序代码都是使用Eclipse开发调试因此需要在Linux系统中安装Eclipse。可以在 ubuntu software 中直接下载 eclipse。 二使用Eclipse开发调试HDFS Java程序
Hadoop采用Java语言开发的提供了Java API与HDFS进行交互。上面介绍的Shell命令在执行时实际上会被系统转换成Java API调用。Hadoop官方网站提供了完整的Hadoop API文档http://hadoop.apache.org/docs/stable/api/想要深入学习Hadoop编程可以访问Hadoop官网查看各个API的功能和用法。本教程只介绍基础的HDFS编程。为了提高程序编写和调试效率本教程采用Eclipse工具编写Java程序。现在要执行的任务是用Java编写程序检测HDFS中是否存在文件myLocalFile.txt编译运行程序并显示检测结果。
1. 在Eclipse中创建项目
启动Eclipse。当Eclipse启动以后会弹出如下图所示界面提示设置工作空间workspace。 可以直接采用默认的设置“/home/hadoop/eclipse-workspace”点击“Launch”按钮。可以看出由于当前是采用hadoop用户登录了Linux系统因此默认的工作空间目录位于hadoop用户目录“/home/hadoop”下。Eclipse启动以后会呈现如下图所示的界面。
2. 为项目添加需要用到的JAR包
进入下一步的设置以后会弹出如下图所示界面。 若没有且找不到jdk只有jre可根据下面的文章进行操作。
https://blog.csdn.net/weixin_52308622/article/details/130688200?spm1001.2014.3001.5501
需要在这个界面中加载该Java工程所需要用到的JAR包这些JAR包中包含了可以访问HDFS的Java API。这些JAR包都位于Linux系统的Hadoop安装目录下对于本教程而言就是在“/usr/local/hadoop/share/hadoop”目录下。点击界面中的“Libraries”选项卡然后点击界面右侧的“Add External JARs…”按钮会弹出如下图所示界面。 在该界面中上面的一排目录按钮即“usr”、“local”、“hadoop”、“share”、“hadoop”和“common”当点击某个目录按钮时就会在下面列出该目录的内容。为了编写一个能够与HDFS交互的Java应用程序一般需要向Java工程中添加以下JAR包1“/usr/local/hadoop/share/hadoop/common”目录下的所有JAR包包括hadoop-common-3.3.2.jar、hadoop-common-3.3.2-tests.jar、hadoop-nfs-3.3.2.jar、hadoop-kms-3.3.2.jar和hadoop-registry-3.3.2.jar注意不包括目录jdiff、lib、sources和webapps2“/usr/local/hadoop/share/hadoop/common/lib”目录下的所有JAR包3“/usr/local/hadoop/share/hadoop/hdfs”目录下的所有JAR包注意不包括目录jdiff、lib、sources和webapps4“/usr/local/hadoop/share/hadoop/hdfs/lib”目录下的所有JAR包。
比如如果要把“/usr/local/hadoop/share/hadoop/common”目录下的hadoop-common-3.3.2.jar、hadoop-common-3.3.2-tests.jar、hadoop-nfs-3.3.2.jar、hadoop-kms-3.3.2.jar和hadoop-registry-3.3.2.jar添加到当前的Java工程中可以在界面中点击目录按钮进入到common目录然后界面会显示出common目录下的所有内容。在界面中用鼠标点击选中hadoop-common-3.3.2.jar、hadoop-common-3.3.2-tests.jar、hadoop-nfs-3.3.2.jar、hadoop-kms-3.3.2.jar和hadoop-registry-3.3.2.jar不要选中目录jdiff、lib、sources和webapps然后点击界面右上角的“open”按钮就可以把JAR包增加到当前Java工程中出现的界面如下图所示。 从这个界面中可以看出hadoop-common-3.3.2.jar、hadoop-common-3.3.2-tests.jar、hadoop-nfs-3.3.2.jar、hadoop-kms-3.3.2.jar和hadoop-registry-3.3.2.jar已经被添加到当前Java工程中。然后按照类似的操作方法可以再次点击“Add External JARs…”按钮把剩余的其他JAR包都添加进来。需要注意的是当需要选中某个目录下的所有JAR包时可以使用“CtrlA”组合键进行全选操作。全部添加完毕以后就可以点击界面右下角的“Finish”按钮完成Java工程HDFSExample的创建。
3. 编写Java应用程序
下面编写一个Java应用程序用来检测HDFS中是否存在一个文件。请在Eclipse工作界面左侧的“Package Explorer”面板中如下图所示找到刚才创建好的工程名称“HDFSExample”然后在该工程名称上点击鼠标右键在弹出的菜单中选择“New-Class”菜单。 在该界面中只需要在“Name”后面输入新建的Java类文件的名称这里采用名称“HDFSFileIfExist”其他都可以采用默认设置然后点击界面右下角“Finish”按钮出现如下图所示界面。 可以看出Eclipse自动创建了一个名为“HDFSFileIfExist.java”的源代码文件请在该文件中输入以下代码
import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;public class HDFSFileIfExist {public static void main(String[] args){try{String fileName test;Configuration conf new Configuration();conf.set(fs.defaultFS, hdfs://localhost:9000);conf.set(fs.hdfs.impl, org.apache.hadoop.hdfs.DistributedFileSystem);FileSystem fs FileSystem.get(conf);if(fs.exists(new Path(fileName))){System.out.println(文件存在);}else{System.out.println(文件不存在);}}catch (Exception e){e.printStackTrace();}}}
该程序用来测试HDFS中是否存在一个文件其中有一行代码
String fileName test
这行代码给出了需要被检测的文件名称是“test”没有给出路径全称表示是采用了相对路径实际上就是测试当前登录Linux系统的用户hadoop在HDFS中对应的用户目录下是否存在test文件也就是测试HDFS中的“/user/hadoop/”目录下是否存在test文件。根据前序实验内容myLocalFile.txt的完整路径为/user/hadoop/(名字)/myLocalFile.txt 4. 编译运行程序
在开始编译运行程序之前请一定确保Hadoop已经启动运行如果还没有启动需要打开一个Linux终端输入以下命令启动Hadoop
cd /usr/local/hadoop
./sbin/start-dfs.sh
现在就可以编译运行上面编写的代码。可以直接点击Eclipse工作界面上部的运行程序的快捷按钮当把鼠标移动到该按钮上时在弹出的菜单中选择“Run As”继续在弹出来的菜单中选择“Java Application”运行即可