HDFS Shell命令介绍
HDFS Shell是由一系列类似Linux Shell的操作命令组成。借助这些命令,用户可以完成HDFS文件的复制、删除和查找等操作,也可以完成HDFS与Linux本地文件系统、S3文件系统等的交互。
更多可以参考hadoop官方文档:http://hadoop.apache.org/docs/
1、HDFS有关文件操作的Shell命令
一般格式如下:
$ hadoop fs [通用选项]
其中,“hadoop”是Hadoop系统在Linux系统中的主命令,它对应的程序文件位于Hadoop安装目录的bin子目录中。“fs”是子命令,表示执行文件系统操作。通用选项由HDFS文件操作命令和操作参数组成,不能省略,必须以英文减号字符“-”打头。操作对象在操作参数中指定。
例如,“hadoopfs -ls /”命令表示显示HDFS文件系统的根目录信息。在该命令中,“-ls”是HDFS的文件操作命令,功能与Linux系统中的ls命令相似。“/”是操作参数,指定操作对象为HDFS文件系统的根目录。
2、HDFS Shell帮助
1.显示所有帮助信息 $ hadoop fs –help
2.显示特定命令的帮助
若要显示某个特定Shell命令的帮助信息,则可在help命令之后添加该Shell命令。
例如,$ hadoop fs -help ls
3、文件操作命令
在HDFS Shell命令中,有关文件的操作命令比较丰富,包括目录或文件的创建、复制、重命名、显示、查找、统计等命令。
3.1、 ls和lsr
一般格式如下:
hadoop fs -ls
[-d] [-h] [-R]
其中,各选项说明如下:
-d选项: 将目录显示为普通文件(plain file)
-h选项: 使用方便人阅读的信息单位显示文件大小,例如64.0m 表示67108864字节
-R选项: 递归显示所有子目录的信息
lsr功能等同于ls -R命令
3.2、mkdir命令
mkdir命令用来在指定的path中新建子目录。其中,创建位置path可采用URI格式进行指定。该命令功能与Linux系统的mkdir相同,允许一次创建多个子目录。一般格式如下:
hadoop fs -mkdir [-p]
其中,-p选项表示创建子目录时先检查路径是否存在,若不存在则同时创建相应的各级目录。
例如, hadoop fs -mkdir /test1 /test2
此处,若文件路径/test1不存在,则可使用 hadoop fs -mkdir -p /test1 /test2
3.3、touchz和appendToFile命令
touchz命令与Linux的touch命令功能相同,用于创建一个空文件。appendToFile命令用于把一个或多个Linux本地的原文件的内容追加到目标文件中。2条命令的格式分别如下:
hadoop fs -touchz URI[URI……]
hadoop fs -appendToFile
其中,
例如: hadoop fs -touchz /test1/abc.txt
3.4、cp、mv、rm、rmdir和rmr命令
这4条命令类似Linux系统命令,表示复制文件、移动文件和删除文件。
(1) cp命令
cp命令用于将指定URI的一个或多个源文件复制到HDFS文件系统中目标位置。该命令一般格式如下:
hadoop fs -cp [-f] [-p | -p[topax]] URI [URI ...]
其中,各选项说明如下:
-f选项:表示如果目标文件存在,则覆盖它。
-p选项:表示需要保存文件属性(包括文件的时间戳、拥有者、许可权限、ACL等。)
例如,$ hadoop fs -cp file:/home/hadoop/file1 /x
(2)mv命令
mv命令用于移动指定源文件到目标文件。当源文件和目标文件的路径相同时,该命令实质是重命名文件名。当源文件有多个文件时,目标对象必须是一个目录。该命令不允许跨越文件系统移动文件。例如,将Linux本地文件移动到HDFS中。
mv命令一般格式如下:
hadoop fs -mv URI [URI ...]
例如:$ hadoop fs -mv /x/file1 /x/file1.txt
(3) rm、rmdir和rmr命令
这3条命令用来删除指定URI中的文件或目录。为安全起见,执行删除操作后,被删除的文件可放入垃圾目录(trash directory)中。需要注意的是,HDFS默认情况下关闭了垃圾目录功能,用户可以在core-site.xml文件中设置fs.trash.interval配置项的值为非零值,即可启用该功能。rm命令的一般格式如下:
hadoop fs -rm [-f] [-r |-R] [-skipTrash] URI [URI ...]
其中,各选项说明如下:
-f选项:表示执行删除操作时不显示提示信息,包括错误提示。
-R或-r选项:表示删除目录,连同内部文件或子目录。
rmdir和rmr命令用于删除目录。其中,rmdir只能删除空目录,rmr与rm–r功能相同。
3.5、cat、tail、du、dus、stat和count命令
(1) cat、tail命令
cat命令与Linux系统的cat类似,能够输出指定文件的全部内容;而tail命令只能显示文件的最后1KB的内容。可见,当输出对象小于1KB时,cat和tail命令效果相同。
例如:
$ hadoop fs -cat /x/file 1.txt
$ hadoop fs -cat file:/home/hadoop/file2
(2) du、dus命令
du命令用来显示文件或目录占用存储空间的大小,当目标对象是一个文件时,将输出该文件的长度。该命令的一般格式如下:
hadoop fs -du [-s] [-h] URI [URI ...]
其中,各选项说明如下:
-s 选项:汇总输出各目标文件的总长度,而不是单个文件的汇总。
-h选项:以便于人阅读的信息单位显示文件大小,例如MB。
dus命令用来输出各目标文件的总长度,与du -s功能相同。
例如:$ hadoop fs -du /x/y/test1/abc.txt
(3) stat命令
stat命令支持以指定输出格式显示文件或目录的统计信息。该命令的一般格式如下:
hadoop fs -stat [format]
其中,[format]是一个输出格式字符串,可以包含普通字符,也可以包含%打头的格式字符,例如%b。如果是普通字符,则直接显示输出。
例如:$ hadoop fs -stat "%n '%F' %b %o %r %u:%g %y" /x/file1.txt
(4) count命令
count命令用来统计指定路径的文件数,输出的主要信息包括:目录数(DIR_COUNT)、文件个数(FILE_COUNT)、内容长度(CONTENT_SIZE)以及对象名(FILE_NAME)。该命令支持Linux通配符,例如用星号*来匹配任意不确定的多个字符。该命令的一般格式如下:
hadoop fs -count [-h]
其中,-h选项表示以便于阅读的信息单位显示文件大小。
例如:$ hadoop fs -count file:/home/hadoop/hadoop-2*
3.6、 find、checksum和df 命令
(1) find命令
该命令用来查找与指定表达式匹配的所有文件,以找出想要查找的文件,其一般格式如下:
hadoop fs -find
其中,path为查找目标,省略查找目标时,默认从当前目录中开始查找;expression为查找表达式,支持Linux系统的通配符,可用-name或-iname选项来定义,表示根据文件名进行匹配查找。其中,iname选项表示不区分大小写(case insensitive)。省略查找表达式时,该命令的功能等效于lsr命令,显示指定目录及其子目录的所有文件列表。
例如:$ hadoopfs -find / -name '*.txt'
(2) checksum命令
checksum命令用来返回指定文件的校验码信息。
例如:$ hadoop fs -checksum /x/file1.txt
(3) df命令
df命令用来显示指定文件的大小及HDFS系统剩余存储空间。该命令的一般格式如下:
hadoop fs -df [-h] URI [URI ...]
其中,-h选项使用便于阅读的方式格式化文件的大小,例如用64.0m来代替67108864。
例如:$ hadoop fs -df /x/file1.txt
4、跨文件系统的交互操作命令
1. put和 copyFromLocal命令
这2条命令都表示上传文件,即把Linux本地文件系统中的一个或多个文件复制到HDFS文件系统中。
put命令的一般格式如下: hadoop fs -put
例如:$ hadoopfs -put hadoop-2.7.2.tar.gz /test/
2. get和copyToLocal命令
这2条命令都表示下载文件,即从HDFS文件系统中复制文件到Linux本地文件系统。
get命令的一般格式如下:
hadoop fs -get [-ignorecrc] [-crc]
其中,-ignorecrc选项表示忽略CRC检验错误。
例如:$ hadoopfs -get /x/file1.txt myfile.txt
3. moveFromLocal和moveToLocal命令
这2条命令提供Linux文件系统和HDFS文件系统之间的“乾坤大挪移”操作,moveFromLocal命令支持从本地将文件移动到HDFS中, moveToLocal命令则相反。
一般格式如下:
hadoop fs -moveFromLocal
hadoop fs -moveToLocal [-crc]
不同于put和get命令,此2条命令操作结束之后原文件将不复存在。
5、权限管理操作
1. chgrp命令
该命令用于修改文件所属的组。需要注意的是,只有文件的拥有者或超级用户才能有权执行该命令操作。一般格式如下:
hadoop fs -chgrp [-R] GROUP URI [URI ...]
其中,-R选项表示涵盖指定URI的内部所有目录和文件。
例如,执行以下操作,修改/test2目录及内部目录和文件的所属的用户组为root组:
$hadoop fs -chgrp -R root /test2
2. chown命令
该命令用于修改文件的拥有者。需要注意的是,只有超级用户才能有权执行该命令操作。
一般格式如下:
hadoop fs -chown [-R] [OWNER][:[GROUP]] URI [URI ]
其中,-R选项的功能与chgrp命令的-R选项相同。
例如,执行以下命令,修改/test2/myfile.txt的拥有者为root用户。
$hadoop fs -chown root /test2/myfile.txt
3. chmod命令
该命令用来修改文件的操作权限。需要注意的是,只有文件的拥有者和超级用户才能有权执行该命令操作。
一般格式如下:
hadoop fs -chmod [-R]
其中,-R选项表示把目标URI内的所有文件和子目录的权限一起修改。
4. setrep命令
该命令用来修改一个文件的副本系数。如果目标对象是一个目录,则该命令将修改该目录及其子目录中的所有文件的副本系数。一般格式如下:
hadoop fs -setrep [-R] [-w]
其中,各选项说明如下:
-w选项:表示请求该命令等待到副本完成之时。这可能需要很长的时间。
-R选项:用于递归改变目录下所有文件的副本系数。
例如:$ hadoop fs -setrep 3 /test2/myfile.txt
5. truncate命令
该命令用于强制截断文件数据为指定长度的数据块,也就是要求HDFS系统不采用默认长度(如128MB)而按指定长度值把文件数据内容重新切分。
一般格式如下:
hadoop fs -truncate [-w]
其中,-w选项表示请求该命令等待到数据块截断完成之时。省略-w选项,由于truncate命令通常会在目标文件实际切分操作结束之前提前结束,显然目标文件将仍然处于未关闭状态,因此此时不能立即重新打开,进行追加数据操作。
例如,执行以下命令,把myfile.txt文件按10字节长度进行截断:
$hadoop fs -truncate 10 /test2/myfile.txt