目录
对于 HDFS 的基本操作,可以通过 HDFS 命令行实现。在集群服务器的终端,通过“hdfs dfs”命令即可完成对 HDFS 目录及文件的管理操作包括创建目录、上传文件与下载文件、查看文件内容、删除文件或目录等。
1.创建目录
在集群服务器的终端,输入“hdfs dfs”命令,按 Enter 键后即可看到 HDFS 基础操作命令的使用帮助信息,其中的“[-mkdir [-p]<path>..]”命令可用于创建目录,参数 path 用以指定创建的新目录。在 HDFS 中创建/user/dfstest 目录,如下代码所示。
hdfs dfs -mkdir /user/dfstest
查看在 HDFS 目录/user/下的文件列表,结果如图 1-1所示,可看到新创建的目录。
“hdfs dfs -mkdir <path>”命令只能逐级地创建目录,如果父目录不存在,那么使用该命令将会报错。例如,创建/user/testexample 目录,若example 的父目录test不存在,则执行'hdfs dfs -mkdir /user/test/example”命令将会报错。若加上-p,则可以同时创建多级目录,如下代码所示,同时创建父目录 test 和子目录 example。
hdfs dfs -mkdir -p /user/test/example
2.上传与下载文件
创建新目录/user/dfstest后,即可向该目录上传文件。通过“hdfs dfs”命令查看上传文件命令的使用帮助信息,如表 3-3所示。
命令 | 解释 |
---|---|
hdfs dfs [-copyFromLocal [-f] [-p] [-l] <localsrc>...<dst>] | 将文件从本地文件系统复制到HDFS,主要参数localsrc 为本地文件路径,dst 为复制的目标路径 |
hdfs dfs [-moveFromLocal <localsrc> ... <dst>] | 将文件从本地文件系统移动到HDFS,主要参数localsrc 为本地文件路径,dst为移动的目标路径 |
hdfs dfs [-put [-f] [-p] [-l] <localsrc> ... <dst>] | 将文件从本地文件系统上传到HDFS,主要参数localsrc 为本地文件路径,dst为上传的目标路径 |
分别使用表 2-1 中的3个命令,以 master 中的本地文件 a.txt为例(文件内容如表 2-2所示 ),将其上传至 HDFS 的/user/dfstest 目录下,如下代码所示,其中后两个命令对上传至HDFS的文件进行了重命名。
I have a pen I have an apple |
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
运行代码后,在/user/dfstest 日录下可以看到图 2-1所示的3个文件。注意,在上面代码所示的第3个命令中,-moveFromLocal用于将本地文件移动到 HDFS,即执行命令后 Linux 系统中的本地文件 a.txt将被删除。
同理,通过“hdfs dfs”命令可以査看下载文件命令的使用帮助信息,如表 2-3 所示。
命令 | 解释 |
---|---|
hdfs dfs [-copyToLocal [-p] [-ignoreCrc] [-crc] <src>...<localdst>] | 将文件从 HDFS 复制到本地文件系统,主要参数src为HDFS 文件路径,localdst为本地系统文件路径 |
hdfs dfs [-get [-p] [-ignoreCrc] [-crc] <src>...<localdst>] | 获取 HDFS 上指定路径的文件到本地文件系统,主要参数 src 为 HDFS 文件路径,localdst 为本地系统文件路径 |
分别使用表 2-3 中的两个命令下载 HDFS 的/user/dfstest目录中的 a.txt和 c.txt 文件至Linux 本地目录/data/hdfs_test/中,如下代码所示。
hafs dfs -copyToLocal /user/dfstest/a.txt /data/hdfs_test/
hdfs dfs -get/user/dfstest/c.txt /data/hdfs_test/
3.查看文件内容
当用户想查看某个文件内容时,可以直接使用 HDFS 命令。HDFS 提供了两个查看文件内容的命令,如表 3-1所示。
命令 | 解释 |
---|---|
hdfs dfs [-cat [-ignoreCrc] <src> ...] | 输出 HDFS 文件内容,主要参数 src用于指定文件路径 |
hdfs dfs [-tail [-f] <file>] | 输出 HDFS 文件最后 1024B 的内容,主要参数 file 用于指定文件 |
分别使用表 3-1 中的两个命令査看 HDFS 的 /user/dfstest 日录下文件 a.txt 和 b.txt 的具体内容,如下代码所示。
hdfs dfs -cat /user/dfstest/a.txt
hdfs dfs -tail /user/dfstest/b.txt
结果如图3-1所示。
4.删除文件或目录
当HDFS 上的某个文件或目录被确认不再需要时,可以选择删除,释放HDFS的存储空间。在 HDFS 的命令帮助文档中,HDFS 主要提供了两个删除文件或目录的命令,如表 4-1 所示。
命令 | 解释 |
---|---|
hdfs dfs [-rm [-f] [-r|-R] [-skipTrash] <src> ...] | 删除 HDFS 上的文件,主要参数src用于指定删除文件的路径 |
hdfs dfs [-rmdir [--ignore-fail-on-non-empty] <dir> ...] | 若删除的是一个目录,则可以用该命令,主要参数dir 用于指定目录路径 |
先在 HDFS 的/user/dfstest 目录下创建一个测试目录rmdir,再使用表 4-1 中的两个命令分别删除 /user/dfstest 目录下的 c.txt 文件和新创建的 rmdir 目录,如下代码所示。
hdfs dfs -mkdir /user/dfstest/rmdir
hdfs dfs -rm /user/dfstest/c.txt
hdfs dfs -rmdir /user/dfstest/rmdir
执行删除命令后,查看 HDFS 的 /user/dfstest 目录下的内容,结果如图 4-1 所示,说明已成功删除 c.txt 文件和 rmdir 目录。
Hadoop 框架的核心设计为 HDFS 和 MapReduce,HDFS 负责数据的存储,MapReduce则负责数据的计算。对海量数据进行计算前,数据的存储是一步必要的操作,因此,需要先掌握 HDFS 的基本操作方法。