操作命令是以 hdfs dfs
开头的命令。通过这些命令,用户可以完成 HDFS 文件的 复制、删除 和 查找 等操作,Shell 命令的一般格式如下。
hdfs dfs [通用选项]
其中,hdfs
是 Hadoop 系统在 Linux 系统中的主命令;dfs
是子命令,表示执行文件系统操作;通用选项由 HDFS 文件操作命令和操作参数组成。
hdfs dfs -mkdir [-p] <文件路径>
[-p]
:表示如果父目录不存在,先创建父目录。例如,新建文件夹 /202012721
、/202012721/dir1
。命令如下:
hdfs dfs -mkdir /202012721
hdfs dfs -mkdir -p /202012721/dir1
结果如下:
hdfs dfs -ls [-d][-h][-R] <文件路径>
[-d]
:返回 path
。[-h]
:h
指 human-readble
,表示按照人性化的单位显示文件大小,比如文件显示为 10 MB,而不会显示 10240 KB。[-R]
:级联显示 paths
下的文件。例如,列出根目录下的文件或目录。命令如下:
hdfs dfs -ls /
结果如下:
hdfs dfs -touchz <存放路径>
例如,在主目录 /202012721/input
下创建大小为 0 0 0 的空文件 file
。命令如下:
hdfs dfs -touchz /202012721/input.txt
hdfs dfs -ls /202012721
结果如下:
hdfs dfs -put [-f] [-p] <本地路径>
或者
hdfs dfs -copyFromLocal [-f] [-p] [-l] <本地路径>
在这里我们只演示第一个命令。例如,在本地创建一个文件 data.txt
并传到 HDFS 的 /202012721
目录下命令如下:
hdfs dfs -put data.txt /202012721/data.txt
结果如下:
hdfs dfs -moveFromLocal <本地文件路径>
与 hdfs dfs -copyFromLocal
命令不同的是,此命令将文件复制到 HDFS 后,本地的文件会被删除。
例如,我们把本地文件 data2.txt
移动到 HDFS 的 /202012721
命令如下:
hdfs dfs -moveFromLocal data2.txt /202012721
结果如下:
hdfs dfs -get [-p] <本地文件路径>
或者
hdfs dfs -copyToLocal [-p] [-ignoreCrc] [-crc] <本地文件路径>
例如,将 HDFS 中的 /202012721/data.txt
文件下载并保存为本地的 ~/local_data.txt
:
hdfs dfs -get /202012721/data.txt ~/local_data.txt
将 /202012721/data2.txt
文件下载到本地目录:
hdfs dfs -copyToLocal /202012721/data2.txt ~
hdfs dfs -cat [-ignoreCrc] <文件路径>
[-ignoreCrc]
:忽略循环检验失败的文件。hdfs dfs -text [-ignoreCrc] <文件路径>
text
不仅可以查看文本文件,还可以查看压缩文件和 Avro
序列化的文件。hdfs dfs -tail [-f] <文件路径>
[-f]
:动态更新显示数据。tail
查看的是最后 1 KB 的文件(Linux 上的 tail
默认查看最后 10 10 10 行记录)。例如,查看 /202012721/data.txt
。命令如下:
hdfs dfs -cat /202012721/data.txt
结果如下:
hdfs dfs -appendToFile <本地路径> <目标路径>
该命令将 localsrc
指向的本地文件内容写入目标文件 dst
。例如,在本地根目录下新建 data3.txt
文件,内容为 hadoop
,追加到文件 /202012721/data.txt
中。命令如下:
hdfs dfs -appendToFile data3.txt /202012721/data.txt
hdfs dfs -cat /202012721/data.txt
结果如下:
hdfs dfs -rm [-f] [-r] <文件路径>
[-f]
:如果要删除的文件不存在,不显示错误信息。[-r/R]
:级联删除目录下所有的文件和子目录文件。例如,删除 HDFS 中的 /202012721/data2.txt
文件。命令如下:
hdfs dfs -rm /202012721/data2.txt
结果如下:
按字节显示指定目录所占空间大小。
hdfs dfs -du [-s] [-h] <文件路径>
[-s]
:显示指定目录下文件总的大小。[-h]
:h
指 human-readble
,表示按照人性化的单位显示文件大小,比如文件显示为 10 MB,而不会显示 10240 KB。例如,显示 HDFS 根目录中 202012721
文件夹下所有文件的大小。命令如下:
hdfs dfs -du /202012721
结果如下:
hdfs dfs -cp [-f] [-p | -p[topax]] <原路径> <目标路径>
[-f]
:如果目标文件存在,将强行覆盖。[-p]
:将保存文件的属性。例如,将 HDFS 中的 /202012721/data.txt
复制为 /202012721/data_copy.txt
。命令如下:
hdfs dfs -cp /202012721/data.txt /202012721/data_copy.txt
结果如下:
hdfs dfs -mv <原路径> <目标路径>
例如,将 HDFS 中的 /202012721/data_copy.txt
移动(也可理解为改名)为 /202012721/data2.txt
。命令如下:
hdfs dfs -mv /202012721/data_copy.txt /202012721/data2.txt
结果如下:
管理命令是以 hdfs dfsadmin
开头的命令。通过这些命令,用户可以管理 HDFS。管理命令的一般格式如下:
hdfs dfsadmin [通用选项]
其中,hdfs
是 Hadoop 系统在 Linux 系统中的主命令;dfsadmin
是子命令,表示执行文件系统管理的操作;通用选项由 HDFS 管理命令和参数组成。
hdfs dfsadmin -report
结果如下:
hdfs dfsadmin -printTopology
结果如下:
我们把操作命令 hdfs dfs
、管理命令 hdfs dfsadmin
之外的命令称为其他命令。输入 hdfs
查看。