文章目录
- 主要内容
- 1.编程实现以下指定功能,并利用Hadoop提供的Shell命令完成相同任务:
- 一.shell命令行实现
- 1.向HDFS中上传任意文本文件,如果指定的文件在HDFS中已经存在,则由用户来指定是追加到原有文件末尾还是覆盖原有的文件;(put)
- 打开命令端口,并且输/apps/hadoop/sbin/start-dfs.sh启动HDFS。NameNode、DataNode、Secondary NameNode分别被启动:
- 2.检查文件是否存在,在命令行中输入如下命令
-
- 3.如果结果显示文件已经存在,则用户可以选择追加到原来文件末尾或者覆盖原来文件,具体命令如下:
-
- 4.从HDFS中下载指定文件,如果本地文件与要下载的文件名称相同,则自动对下载的文件重命名;(get)
-
- 5.将HDFS中指定文件的内容输出到终端中;(cat)
- 6.通过cat命令查看HDFS文件内容
- 7.显示HDFS中指定的文件的读写权限、大小、路径等信息;(ls)
-
- 二.编程实现
- 1.因已上传test.txt文件到HDFS,所以代码运行结果为追加至文件末尾。
- 2.因为HDFS根目录下已经存在test.txt文件,所以下载下来的文件会被重命名,重命名为test.txt_0。
- 3.读取HDFS上的test.txt文件,可以看见刚刚(1)中追加内容后的文件
- 4.读取HDFS根目录下的test.txt文件读写权限、大小、路径等信息
- 5.给定的目录为HDFS的根目录‘/’,该目录下只有test.txt文件,所以输出test.txt信息
- 总结
主要内容
1.编程实现以下指定功能,并利用Hadoop提供的Shell命令完成相同任务:
- 向HDFS中上传任意文本文件,如果指定的文件在HDFS中已经存在,则由用户来指定是追加到原有文件末尾还是覆盖原有的文件;(put)
- 从HDFS中下载指定文件,如果本地文件与要下载的文件名称相同,则自动对下载的文件重命名;(get)
- 将HDFS中指定文件的内容输出到终端中;(cat)
- 显示HDFS中指定的文件的读写权限、大小、路径等信息;(ls)
- 给定HDFS中某一个目录,输出该目录下的所有文件的读写权限、大小、创建时间、路径等信息;(ls)
- copyFromLocalFile方法:文件上传
- copyToLocalFile方法:文件下载
- listStatus方法:获取指定目录或文件的基本信息,借助FsStatus类,可以实现ls命令的功能
一.shell命令行实现
1.向HDFS中上传任意文本文件,如果指定的文件在HDFS中已经存在,则由用户来指定是追加到原有文件末尾还是覆盖原有的文件;(put)
打开命令端口,并且输/apps/hadoop/sbin/start-dfs.sh启动HDFS。NameNode、DataNode、Secondary NameNode分别被启动:

2.检查文件是否存在,在命令行中输入如下命令
代码如下(示例):
$ cd /usr/local/hadoop
$ ./bin/hdfs dfs -test -e text.txt
然后输入$ echo $?检查,1表示文件不存在,0表示文件存在

3.如果结果显示文件已经存在,则用户可以选择追加到原来文件末尾或者覆盖原来文件,具体命令如下:
代码如下(示例):
$ if $(hdfs dfs -test -e text.txt);
$ then $(hdfs dfs -appendToFile local.txt text.txt);
$ else $(hdfs dfs -copyFromLocal -f local.txt text.txt);
$ fi
4.从HDFS中下载指定文件,如果本地文件与要下载的文件名称相同,则自动对下载的文件重命名;(get)
代码如下(示例):
1.输入hadoop fs -put ./test.txt /,使用put将test.txt文件上传
2.使用如下命令操作:
$ if $(hdfs dfs -test -e file:///home/hadoop/text.txt);
$ then $(hdfs dfs -copyToLocal text.txt ./text2.txt);
$ else $(hdfs dfs -copyToLocal text.txt ./text.txt);
$ fi

5.将HDFS中指定文件的内容输出到终端中;(cat)
1.通过上述实验将指定文件上传至HDFS,并且通过hadoop fs -ls /log1显示。
运行后显示如下,此时列出了HDFS上/log目录下所有文件,及其文件的各种信息

6.通过cat命令查看HDFS文件内容

7.显示HDFS中指定的文件的读写权限、大小、路径等信息;(ls)
代码如下(示例):
1.在命令行输入hadoop fs -ls -h /dir/test.txt查看文件读写权限、大小、路径等信息

二.编程实现
1.因已上传test.txt文件到HDFS,所以代码运行结果为追加至文件末尾。

在终端使用命令行查看test.txt文件,发现相同的内容已经追加至文件末尾

2.因为HDFS根目录下已经存在test.txt文件,所以下载下来的文件会被重命名,重命名为test.txt_0。


3.读取HDFS上的test.txt文件,可以看见刚刚(1)中追加内容后的文件

4.读取HDFS根目录下的test.txt文件读写权限、大小、路径等信息
5.给定的目录为HDFS的根目录‘/’,该目录下只有test.txt文件,所以输出test.txt信息

总结
以上是今天要讲的内容,学到了HDFS操作。