一、实验原理
调用文件系统(FS)Shell命令
使用 hadoop fs <args>形式。
所有的FS shell命令使用URI路径作为参数。URI格式是scheme://authority/path
对于HDFS文件系统,scheme是hdfs,对于本地文件系统,scheme是file。其中scheme和authority参数都是可选的,如果未加指定,就会使用配置中指定的默认scheme。一个HDFS文件或目录比如/parent/child可以表示成hdfs://namenode:namenodeport/parent/child,或者更简单的/parent/child(假设你配置文件中的默认值是namenode:namenodeport)。大多数FS Shell命令的行为和对应的Unix Shell命令类似,出错信息会输出到stderr,其他信息输出到stdout。
二、实验环境
macOS 11.2.3
Hadoop-3.1.4
三、实验内容
1.学习开启、关闭Hadoop
2.学习在Hadoop中创建、修改、查看、删除文件夹及文件
3.学习改变文件的权限及文件的拥有者
4.学习使用shell命令提交job任务
5.Hadoop安全模式的进入与退出
四、实验过程
1.切换到Hadoop路径下,使用start-all.sh启动相关进程。
使用jps查看进程启动情况。

2.使用hadoop fs -mkdir /test1 在根目录下创建一个test1目录
使用hadoop fs -touchz /test1/file.txt 在刚刚创建的目录下新建一个file.txt
使用hadoop fs -ls -R / 递归地查看根目录下的文件


3.使用hadoop fs -mv /test1/file.txt /file2.txt把test1中的file.txt移动到根目录下,并且重新命名为file2.txt
使用hadoop fs -cp /file2.txt /test1把根目录下的file2.txt复制到test1目录下

4.在本地hadoop路径下的data目录下,使用touch data.txt创建一个data.txt
使用echo hello hadoop! >> data.txt ,向data.txt文件中写入hello hadoop!
使用hadoop fs -put ./data.txt /test1,把本地的data.txt上传到HDFS中的test1目录下
使用hadoop fs -cat /test1/data.txt,查看test1下的data.txt内容

除了cat方法,还可以使用hadoop fs -tail /test1/data.txt查看。
(tail方法是将文件尾部1K字节的内容输出)

5.使用hadoop fs -du -s /test1/data.txt 查看Hadoop中test1目录下data.txt文件的大小
-du后的-s可不加,直接写目录表示查看该目录下所有文件大小

6.使用hadoop fs -text /test1/data.txt可以将源文件输出为文本格式,允许的格式是zip和TextRecordInputStream

7.使用hadoop fs -stat /test1/data.txt打印data.txt文件创建日期。
stat方法可以返回指定路径的统计信息,有多个参数可选,当使用-stat选项但不指定format时候,只打印文件创建日期,相当于%y
下面列出format的形式:
%b:打印文件大小(目录为0)
%n:打印文件名 %o:打印block size (我们要的值)
%r:打印备份数
%y:打印UTC日期 yyyy-MM-dd HH:mm:ss
%Y:打印自1970年1月1日以来的UTC微秒数
%F:目录打印directory, 文件打印regular file
8.使用hadoop fs -get /test1/data.txt /usr/local将Hadoop中/test1/data.txt下载到本地的/usr/local目录中

9.使用hadoop fs -chmod 777 /test1/data.txt,赋予Hadoop中/test1目录中的data.txt文件777权限
使用hadoop fs -rm /file2.txt删除Hadoop根下的file2.txt文件
使用hadoop fs -rm -r /test1删除Hadoop根下的test1目录
当在Hadoop中设置了回收站功能时,删除的文件会保留在回收站中.使用hadoop fs -expunge可以清空回收站。

10. 使用Shell命令执行Hadoop自带的WordCount
使用vim data.txt 编辑内容为(hello hadoop hello world hello HDFS)
使用hadoop fs -put ./data.txt /in,在HDFS的根下创建in目录,并将data.txt文件上传到HDFS中的in目录

使用hadoop jar /usr/local/hadoop/hadoop-3.1.4/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.4.jar wordcount /in /out,在hadoop的/usr/local/hadoop/hadoop-3.1.4/share/hadoop/mapreduce路径下存在hadoop-mapreduce-examples-3.1.4.jar包,执行其中的wordcount类,数据来源为HDFS的/in目录,数据输出到HDFS的/out目录


hadoop fs -cat命令一直提示错误,暂时没有排查出原因。所以为了查看输出结果,我查看了一下日志,找到了暂存在本地的文件路径,我们在该路径下查看一下输出结果

计数成功。
Hadoop的安全模式
在分布式文件系统启动后,开始的时候会有安全模式。当分布式文件系统处于安全模式的情况下,文件系统中的内容不允许修改也不允许删除,直到安全模式结束。
安全模式主要是为了系统启动的时候检查各个DataNode上数据块的有效性,同时根据策略必要的复制或者删除部分数据块。
运行期通过命令也可以进入安全模式。
在实践过程中,系统启动的时候去修改和删除文件也会有安全模式不允许修改的出错提示,只需要等待一会儿即可。
使用hdfs dfsadmin -safemode enter开启安全模式
使用hdfs dfsadmin -safemode leave关闭安全模式

此外,还可通过hdfs dfsadmin -safemode get返回安全模式是否开启的信息
通过hdfs dfsadmin -safemode wait等待,一直到安全模式结束
11.切换到hadoop路径的sbin目录下,使用stop-all.sh关闭Hadoop

至此,本次实验结束!
本文介绍了Hadoop Shell的基本操作,包括启动、关闭Hadoop,管理HDFS文件和目录,改变文件权限,提交job任务,以及操作Hadoop安全模式。详细讲解了各种shell命令的使用,如创建、查看、移动、复制、删除文件,设置权限,执行WordCount等。
283

被折叠的 条评论
为什么被折叠?



