对于HDFS文件系统的基本操作,可以通过HDFS命令行实现。在集群服务器的终端,通过hdfs dfs命令即可完成对HDFS目录及文件的管理操作,包括创建目录、上传与下载文件、查看文件内容、删除文件等。
在集群服务器的终端,输入hdfs dfs命令,按Enter键回车后将看到hdfs dfs相关命令的帮助,其中的[-mkdir [-p] <path>...]即可用于创建目录,参数<path>可用于指定创建的新目录。在HDFS中创建/user/dfstest目录,如代码清单2-25所示。
hdfs dfs -mkdir /user/dfstest
查看在HDFS文件目录/user/下的文件列表,结果如图2-59所示,可查看到新创建的目录。
图2-59 创建新目录
使用hdfs dfs -mkdir <path>命令只能逐级地创建目录,如果父目录不存在,那么使用该命令将会报错。例如,创建/user/test/example目录,若example的父目录test不存在,则执行 hdfs dfs -mkdir /user/test/example 命令将会报错。若加上参数-p,则可以同时创建多级目录,如代码清单2-26所示,同时创建父目录test和子目录example。
hdfs dfs -mkdir -p /user/test/example
创建了新目录/user/dfstest后,即可向该目录上传文件。通过hdfs dfs命令查看上传文件操作的相关命令帮助,如表2-6所示。
表2-6 文件上传命令
有一份关于英文语句的文件a.txt,文件内容如表2-7所示。将a.txt文件上传至master中。以master中的a.txt文件为例,我们分别使用如表2-6所示的3个命令将master中的本地文件a.txt上传至HDFS的/user/dfstest目录下,如代码清单2-27所示,其中最后两个命令对上传至HDFS的文件进行了重命名。
表2-7 a.txt
hdfs dfs -copyFromLocal a.txt /user/dfstest hdfs dfs -put a.txt /user/dfstest/c.txt hdfs dfs -moveFromLocal a.txt /user/dfstest/b.txt
执行代码清单2-27后,在/user/dfstest目录下可以看到如图2-60所示的3个文件。注意,在代码清单2-27所示的第3条命令中,moveFromLocal选项是将本地文件移动到HDFS,即执行命令后Linux系统本地文件a.txt将被删除。
图2-60 文件上传后的结果
同理,通过hdfs dfs命令可以查看下载文件操作的相关命令帮助,如表2-8所示。
表2-8 文件下载命令
分别使用表2-8中的两个命令下载HDFS的/user/dfstest目录中的a.txt和c.txt文件至Linux本地目录/data/hdfs_test/中,如代码清单2-28所示。
hdfs dfs -copyToLocal /user/dfstest/a.txt /data/hdfs_test/ hdfs dfs -get /user/dfstest/c.txt /data/hdfs_test/
当用户想查看某个文件内容时,可以直接使用HDFS命令。HDFS提供了两种查看文件内容的命令,如表2-9所示。
表2-9 查看文件内容命令
分别使用表2-9中的两种命令查看HDFS的/user/dfstest目录下的a.txt和b.txt文件的具体内容,如代码清单2-29所示。
hdfs dfs -cat /user/dfstest/a.txt hdfs dfs -tail /user/dfstest/b.txt
执行结果如图2-61所示。
图2-61 查看文件内容命令
当HDFS上的某个文件或目录被确认不再需要时,可以选择删除,释放HDFS的存储空间。在HDFS的命令帮助文档中,HDFS主要提供了两种删除文件或目录的命令,如表2-10所示。
表2-10 删除文件命令
先在HDFS的/user/dfstest目录下创建一个测试目录rmdir,再使用如表2-10所示的两种命令分别删除/user/dfstest目录下的c.txt文件和新创建的rmdir目录,如代码清单2-30所示。
hdfs dfs -mkdir /user/dfstest/rmdir hdfs dfs -rm /user/dfstest/c.txt hdfs dfs -rmdir /user/dfstest/rmdir
在执行删除命令后,查看HDFS的/user/dfstest目录下的内容,结果如图2-62所示,说明已成功删除c.txt文件和rmdir目录。
图2-62 删除文件后的目录