03 HDFS Shell

调用文件系统(FS)Shell命令在使用bin/hadoop fs -cmd<args>的形式

所有的FS Shell命令使用URI路径作为参数scheme://authority/path

  • 对于HDFS系统来说,scheme是hdfs
  • 对于本地文件系统来说,scheme是file

scheme和authority参数都是可选的,如果未指定,就会使用配置中指定的默认scheme

常用的HDFS Shell命令

1、一般格式如下:

$ 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

image-20210106213834337

3、文件操作命令

在HDFS Shell命令中,有关文件的操作命令比较丰富,包括目录或文件的创建、复制、重命名、显示、查找、统计等命令。

3.1、 ls和lsr

一般格式如下:

hadoop fs -ls [-d] [-h] [-R] <args>

其中,各选项说明如下:

-d选项: 将目录显示为普通文件(plain file)

-h选项: 使用方便人阅读的信息单位显示文件大小,例如64.0m 表示67108864字节

-R选项: 递归显示所有子目录的信息

lsr功能等同于ls -R命令

image-20210106221700060

3.2、mkdir命令

mkdir命令用来在指定的path中新建子目录。其中,创建位置path可采用URI格式进行指定。该命令功能与Linux系统的mkdir相同,允许一次创建多个子目录。一般格式如下:

hadoop fs -mkdir <paths>

其中,-p选项表示创建子目录时先检查路径是否存在,若不存在则同时创建相应的各级目录。

例如, hadoop fs -mkdir /test1 /test2

此处,若文件路径/test1不存在,则可使用 hadoop fs -mkdir -p /test1 /test2

image-20210106214209644

image-20210106214433563

3.3、touchz和appendToFile命令

touchz命令与Linux的touch命令功能相同,用于创建一个空文件。appendToFile命令用于把一个或多个Linux本地的原文件的内容追加到目标文件中。2条命令的格式分别如下:

hadoop fs -touchz URI[URI……]

hadoop fs -appendToFile <localsrc> <dst>

其中,<localsrc>为本地源文件,<dst>为HDFS中的目标文件。

例如: hadoop fs -touchz /test1/abc.txt

image-20210106215015053

3.4、cp、mv、rm、rmdir和rmr命令

这4条命令类似Linux系统命令,表示复制文件、移动文件和删除文件。

(1) cp命令

cp命令用于将指定URI的一个或多个源文件复制到HDFS文件系统中目标位置。该命令一般格式如下:

hadoop fs -cp [-f] [-p | -p[topax]] URI [URI ...] <dest>

其中,各选项说明如下:

-f选项:表示如果目标文件存在,则覆盖它。

-p选项:表示需要保存文件属性(包括文件的时间戳、拥有者、许可权限、ACL等。)

例如,hadoop fs -cp file:/home/hadoop/file1 /x

image-20210107152123440

(2)mv命令

mv命令用于移动指定源文件到目标文件。当源文件和目标文件的路径相同时,该命令实质是重命名文件名。当源文件有多个文件时,目标对象必须是一个目录。该命令不允许跨越文件系统移动文件。例如,将Linux本地文件移动到HDFS中。

mv命令一般格式如下:

hadoop fs -mv URI [URI …]

例如:hadoop fs -mv /x/file1 /x/file1.txt

image-20210107152214541

(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功能相同。

image-20210107152711821

image-20210107152546412

image-20210107152803228

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] <path> ...

其中,[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 <localsrc> <dst>

例如:hadoopfs -put hadoop-2.7.2.tar.gz /test/

image-20210107153121629

2. get和copyToLocal命令

这2条命令都表示下载文件,即从HDFS文件系统中复制文件到Linux本地文件系统。

get命令的一般格式如下:

hadoop fs -get [-ignorecrc] [-crc] <src> <localdst>

其中,-ignorecrc选项表示忽略CRC检验错误。

例如:hadoopfs -get /x/file1.txt myfile.txt

image-20210107153410140

3. moveFromLocal和moveToLocal命令

这2条命令提供Linux文件系统和HDFS文件系统之间的“乾坤大挪移”操作,moveFromLocal命令支持从本地将文件移动到HDFS中, moveToLocal命令则相反。

一般格式如下:

hadoop fs -moveFromLocal <localsrc> <dst>

hadoop fs -moveToLocal [-crc] <src> <dst>

不同于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] <MODE[,MODE]... | OCTALMODE> URI [URI ...]

其中,-R选项表示把目标URI内的所有文件和子目录的权限一起修改。

03 HDFS Shell - 图13

4. setrep命令

该命令用来修改一个文件的副本系数。如果目标对象是一个目录,则该命令将修改该目录及其子目录中的所有文件的副本系数。一般格式如下:

hadoop fs -setrep [-R] [-w] <numReplicas> <path>

其中,各选项说明如下:

-w选项:表示请求该命令等待到副本完成之时。这可能需要很长的时间。

-R选项:用于递归改变目录下所有文件的副本系数。

例如:hadoop fs -setrep 3 /test2/myfile.txt

5. truncate命令

该命令用于强制截断文件数据为指定长度的数据块,也就是要求HDFS系统不采用默认长度(如128MB)而按指定长度值把文件数据内容重新切分。

一般格式如下:

hadoop fs -truncate [-w] <length> <paths>

其中,-w选项表示请求该命令等待到数据块截断完成之时。省略-w选项,由于truncate命令通常会在目标文件实际切分操作结束之前提前结束,显然目标文件将仍然处于未关闭状态,因此此时不能立即重新打开,进行追加数据操作。

例如,执行以下命令,把myfile.txt文件按10字节长度进行截断:

$hadoop fs -truncate 10 /test2/myfile.txt

作者:betterwuuu
链接:https://www.jianshu.com/p/55ecbfbc3dde
来源:简书