常用的HDFS Shell命令及解析

常用的HDFS Shell命令

大多数HDFS Shell命令的行为和对应的Unix Shell命令类似,主要不同之处是HDFS Shell 命令操作的是远程Hadoop服务器的文件,而Unix Shell命令操作的是本地文件。
命令 功能
-help [cmd] 显示命令的帮助信息
-ls( r ) 显示当前目录下的所有文件
-du( s ) 显示目录中所有文件的大小
-count [-q] 显示目录中文件数量
-mv 移动多个文件到目标目录
-cp 复制多个文件到目标目录
-rm( r ) 删除文件(夹)
-put 本地文件复制到hdfs
-copyFromLocal 与put相同
-moveFromLocal 本地文件移动到hdfs
-get[-ignoreCrc] 复制文件到本地,可忽略crc校验
-getmerge 将源目录中的所有文件排序合并到一个文件中
-cat 在终端显示文件内容
-text 在终端显示文件内容
-copyToLocal [-ignoreCrc] 复制到本地
-moveToLocal 移动到本地
-mkdir 创建文件夹
-touchz 创建一个空的文件
部分命令的具体使用方法:

1.mkdir 创建目录

使用方法:hadoop fs -mkdir path

接收路径指定的URI作为参数,创建这些目录。其行为类似于UNIX中的mkdir命令
第一种方式

  • hadoop fs -mkdir /user/hadoop/dir1 /user/hadoop/dir2

第二种方式

  • hadoop fs -mkdir hdfs://host1:port1/user/hadoop/dir hdfs://host2:port2/user/hadoop/dir

2.put 上传文件

使用方法:hadoop fs -put localsrc ··· dst

从本地文件系统中复制单个或多个源路径到目标文件系统,也支持从标准输入中读取输入写入到目标文件系统,成功返回0,失败返回-1

复制单个文件

  • hadoop fs -put localfile /user/hadoop/hadoopfile

复制多个文件

  • hadoop fs -put localfile1 localfile2 /user/hadoop/hadoopdir

3.ls 列出文件

使用方法:hadoop fs -ls args

递归版本:hadoop fs -lsr args

#如果是文件,则按照如下的格式返回文件信息。

#文件名 <副本数> 文件大小 修改日期 修改时间 权限 用户ID 组ID

#如果是目录,则返回子文件的一个列表, 就像UNIX中一样。格式如下:

#目录名 dir 修改日期 修改时间 权限 用户ID 组ID

示例:

列出HDFS目录下名为‘input’的文件 返回值:成功返回0 失败返回-1

  • hadoop fs -ls input

递归列出output下的子目录中的文件及目录信息

  • hadoop fs -ls output

列出HDFS下的文件

  • hadoop fs -ls

#注意:在HDFS中未带参数的“ls”命令没有返回值,它默认返回HDFS的“home”目录下的内容。在HDFS中,没有当前目录./这样的概念,也没有cd这个命令。


4.cat 将文件内容显示到stdout

使用方法:hadoop fs -cat URI [URI···]

显示input目录下的所有文件内容

  • hadoop fs -cat input/*

5.get 将hdfs文件复制到本地文件系统

使用方法:hadoop fs -get [-ignorecrc] [crc] src localsrc

-ignorecrc选项复制CRC1校验失败的文件,使用-crc选项复制文件以及CRC信息。

  • hadoop fs -get ini IN1
  • hadoop fs -get /user/hadoop/file localfile
  • hadoop fs -get hdfs://host:port/user/hadoop/file localfile

成功返回0.失败返回-1


6.rm 删除文件或非空目录

使用方法:hadoop fs rm URI [URI···]

删除指定非空目录dir

  • hadoop fs -rm /user/hadoop/dir

删除指定文件file

  • hadoop fs -rm /user/hadoop/file

递归删除目录dir下的子目录及其所有文件

  • hadoop fs -rmr /user/hadoop/file

7.chgrp 改变文件所属的组

使用方法:hadoop fs -chgrp [-R] GROUP URI [URI···]

命令的使用者必须是文件的所有者或root用户


8.chmod 改变文件的权限

hadoop fs -chmod [-R] <MODE[,MODE]···|OCTALMODE> URI [URI···]

命令的使用者必须是文件的所有者或root用户


9.copyFromLocal 复制本地文件到hdfs,与put命令类似

使用方法:hadoop fs -copyFromLocal URI


10.copyToLocal 复制hdfs文件到本地,与get命令类似

使用方法:hadoop fs -copyToLocal [-ignorecrc] [-crc] URI


11.cp 复制文件

使用方法:hadoop fs -cp URI [URI···]

将文件从源路径复制到目标路径。允许有多个源路径,但此时目标路径必须是一个目录

  • hadoop fs -cp /user/hadoop/file1 /user/hadoop/file2
  • hadoop fs -cp /user/hadoop/file1 /user/hadoop/file2 /user/hadoop/dir

返回值:成功返回0,失败返回-1


12.du 显示目录属性

使用方法:hadoop fs -du URI [URI···]

显示目录中所有文件的大小,或者当只指定一个文件时,显示此文件的大小

  • hadoop fs -du /user/hadoop/dir1 /user/hadoop/file1
  • hdfs://host:port/user/hadoop/dir1

13.expunge 清空回收站

使用方法:hadoop fs -expunge

可参考HDFS设计文档以获取更多关于回收站特性的信息。


14.getmerge

使用方法:hadoop fs -getmerge [addnl]

将源目录中的所有文件排序合并到一个本地文件中。addnl是可选的,用于指定在每个文件结尾添加一个换行符


15.mv 移动文件

使用方法:hadoop fs -mv URI [URI···]

将文件从源路径移动到目标路径。这个命令允许有多个源路径,但此时目标路径必须是一个目录,。不允许在不同的文件系统移动文件

  • hadoop fs -mv /user/hadoop/file1 /user/hadoop/dir

16.setrep 改变一个文件的副本系数

使用方法:hadoop fs -setrep [-R] path

  • hadoop fs -setrep -w 3 -R /user/hadoop/dir

17.stat 返回指定路径的统计信息

使用方法:hadoop fs -stat path


18.tail 在stdout中输出文件尾部1KB的内容

使用方法:hadoop fs -tail pathname

包含返回值


19.test 检查文件或目录

使用方法:hadoop fs -test -[ezd] URI

选项说明:

-e:检查文件是否存在。存在返回0

-z:检查文件容量是否为0。是返回0

-d:检查目录是否存在。是返回1,否则返回0

  • hadoop fs -e filename

20.text 将源文件输出为文本格式

使用方法:hadoop fs -text src

允许的格式为:zip和TextRecordInputStream


21.touchz 创建一个空文件

使用方法:hadoop fs -touchz URI [URI···]

  • hadoop fs -touchz pathname

返回值:成功返回0,失败返回-1


Hadoop 系统管理命令

命令 功能
hadoop version 查看Hadoop版本
sbin/start-all.sh 启动Hadoop所有进程
sbin/stop-all.sh 停止Hadoop所有进程
bin/hadoop namenode -format 格式化一个新的分布式文件系统
sbin/start-dfs.sh 在分配的Namenode上,启动HDFS
sbin/stop-dfs.sh 在分配的Namenode上,停止HDFS
sbin/start-yarn.sh 启动yarn
sbin/stop-yarn.sh 停止yarn

Hadoop常用端口号

端口名称 Hadoop2.X Hadoop3.X
NameNode 内部通信端口 8020 / 9000 8020 / 9000/9820
NameNode HTTP UI 50070 9870
MapReduce 查看执行任务端口 8088 8088
历史服务器通信端口 19888 19888

Web 端查看 HDFS 的 NameNode

(a)浏览器中输入:http://hadoop102:9870

(b)查看 HDFS 上存储的数据信息

Web 端查看 YARN 的 ResourceManager

(a)浏览器中输入:http://hadoop103:8088

(b)查看 YARN 上运行的 Job 信息

Web 端查看 JobHistory

(a)浏览器中输入:
http://hadoop102:19888/jobhistory


  1. HDFS客户端软件实现了对HDFS文件内容的校验和(checksum)检查。当客户端创建一个新的HDFS文件时,会计算这个文件每个数据块的校验和,并将校验和作为一个单独的隐藏文件保存在同一个HDFS名字空间下。当用户读取文件内容时,会校验从Datanode获取的数据以及相应的校验和与文件中的检验和是否匹配,如果不匹配,客户端可以选择从其他的Datanode中获取该数据块的副本。 ↩︎

上一篇:【大数据实验】HDFS的应用:数字排序


下一篇:HDFS 内部工作机制