Hadoop—HDFS Shell命令

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    

其中,为本地源文件,为HDFS中的目标文件。

例如: 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] URI [URI ...]

其中,-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

你可能感兴趣的:(Hadoop—HDFS Shell命令)