分布式⽂件系统HDFS上机实践
分布式⽂件系统HDFS
接着前⾯的⽂章:
(⼀),
(⼆)
这节是HDFS的实践。
实验环境:
Ubuntu18.04
Hadoop3.1.3
时间 
2020-08
⽂章⽬录
在学习HDFS编程实践前,我们需要启动Hadoop。执⾏如下命令
cd /usr/local/hadoop
./sbin/start-dfs.sh #启动hadoop
vim编辑器下载与安装
⼀、利⽤Shell命令与HDFS进⾏交互
Hadoop⽀持很多Shell命令,其中fs是HDFS最常⽤的命令,利⽤fs可以查看HDFS⽂件系统的⽬录结构、上传和下载数据、创建⽂件等。
1. hadoop fs适⽤于任何不同的⽂件系统,⽐如本地⽂件系统和HDFS⽂件系统
2. hadoop dfs只能适⽤于HDFS⽂件系统
3. hdfs dfs跟hadoop dfs的命令作⽤⼀样,也只能适⽤于HDFS⽂件系统
在终端输⼊如下命令,可以查看具体某个命令的作⽤
例如:我们查看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”,否则会出错。
如果要删除⽬录:
hadoop fs -rm-r /user/hadoop
“/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/”⽬录下创建⼀个⽂件,⾥⾯可以随意输⼊⼀些单词。
然后,可以使⽤如下命令把本地⽂件系统的“/home/”上传到HDFS中的当前⽤户⽬录的input⽬录下,也就是上传到HDFS的“/user/hadoop/input/”⽬录下:
./bin/hdfs dfs -put /home/  input
可以使⽤ls命令查看⼀下⽂件是否成功上传到HDFS中,具体如下:
./bin/hdfs dfs –ls input
该命令执⾏后会显⽰类似如下的信息:
下⾯使⽤如下命令查看HDFS中的这个⽂件的内容:
./bin/hdfs dfs –cat
下⾯把HDFS中的⽂件下载到本地⽂件系统中的“/home/hadoop/下载/”这个⽬录下,命令如下:
.
/bin/hdfs dfs -get   /home/hadoop/下载
可以使⽤如下命令,到本地⽂件系统查看下载下来的⽂件:
$ cd ~
$ cd 下载
$ ls
$
最后,了解⼀下如何把⽂件从HDFS中的⼀个⽬录拷贝到HDFS中的另外⼀个⽬录。⽐如,如果要把HDFS
的“/user/hadoop/”⽂件,拷贝到HDFS的另外⼀个⽬录“/input”中(注意,这个input⽬录位于HDFS根⽬录下),可以使⽤如下命令:
./bin/hdfs dfs -cp /input
⼆、利⽤Web界⾯管理HDFS
打开Linux⾃带的Firefox浏览器,HDFS的Web界⾯,即可看到HDFS的web管理界⾯,或者在window系统下的浏览器 www.虚拟机
ip:9870
点击Utilities->Browse thr file system, 输⼊/ 点击go即可看到完整的根⽬录:
三、利⽤Java API与HDFS进⾏交互
Hadoop不同的⽂件系统之间通过调⽤Java API进⾏交互,上⾯介绍的Shell命令,本质上就是Java API的应⽤。下⾯提供了Hadoop官⽅的Hadoop API⽂档,想要深⼊学习Hadoop,可以访问如下⽹站,查看各个API的功能。
利⽤Java API进⾏交互,需要利⽤软件Eclipse编写Java程序。
(⼀) 在Ubuntu中安装Eclipse
(⼆)在Eclipse创建项⽬
第⼀次打开Eclipse,需要填写workspace(⼯作空间),⽤来保存程序所在的位置,这⾥按照默认,不需要改动.
由于当前是采⽤hadoop⽤户登录了Linux系统,因此,默认的⼯作空间⽬录位于hadoop⽤户⽬录“/home/hadoop”下
选择“File->New->Java Project”菜单,开始创建⼀个Java⼯程
起名,选择next,先不要选finish。
(三)为项⽬添加需要⽤到的JAR包
进⼊下⼀步的设置以后,点击Libraries,会弹出如图所⽰界⾯。
需要在这个界⾯中加载该Java⼯程所需要⽤到的JAR包,这些JAR包中包含了可以访问HDFS的Java API。这些JAR包都位于Linux系统的Hadoop安装⽬录下,对于本教程(如果是按照之前的教程所配置)⽽⾔,就是在“/usr/local/hadoop/share/hadoop”⽬录下。点击界⾯中的“Libraries”选项卡,然后,点击界⾯右侧的“Add External JARs…”按钮,
在该界⾯中,上⾯的⼀排⽬录按钮(即“usr”、“local”、“hadoop”、“share”、“hadoop”、“mapreduce”和“lib”),当点击某个⽬录按钮时,就会在下⾯列出该⽬录的内容。
为了编写⼀个能够与HDFS交互的Java应⽤程序,⼀般需要向Java⼯程中添加以下JAR包:
(1)”/usr/local/hadoop/share/hadoop/common”⽬录下的hadoop-common-3.1.3.jar和haoop-nfs-3.1.3.jar;
(2)/usr/local/hadoop/share/hadoop/common/lib”⽬录下的所有JAR包;
(3)“/usr/local/hadoop/share/hadoop/hdfs”⽬录下的haoop-hdfs-3.1.3.jar和haoop-hdfs-nfs-3.1.3.jar和hadoop-hdfs-client-3.1.1.jar ;
(4)“/usr/local/hadoop/share/hadoop/hdfs/lib”⽬录下的所有JAR包。
⽐如,如果要把“/usr/local/hadoop/share/hadoop/common”⽬录下的hadoop-common-3.1.3.jar和haoop-nfs-3.1.3.jar添加到当前的Java⼯程中,可以在界⾯中点击⽬录按钮,进⼊到common⽬录,然后,界⾯会显⽰出common⽬录下的所有内容
请在界⾯中⽤⿏标点击选中hadoop-common-3.1.3.jar和haoop-nfs-3.1.3.jar,然后点击界⾯“打开”按钮,就可以把这两个JAR包增加到当前Java⼯程中,出现的界⾯如图
从这个界⾯中可以看出,hadoop-common-3.1.3.jar和haoop-nfs-3.1.3.jar已经被添加到当前Java⼯程中。然后,按照类似的操作⽅法,可以再次点击“Add External JARs…”按钮,把剩余的其他JAR包都添加进来。需要注意的是,当需要选中某个⽬录下的所有JAR包时,可以使⽤“Ctrl+A”组合键进⾏全选操作。全部添加完毕以后,就可以点击界⾯右下⾓的“Finish”按钮,完成Java⼯程HDFSExample的创建。
(四)编写Java应⽤程序代码

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。