Hadoop Shell是Hadoop生态系统中最基础且强大的工具之一,它允许用户通过命令行与Hadoop分布式文件系统(HDFS)和YARN等组件进行交互,掌握Hadoop Shell常用命令对于Hadoop开发、运维及数据处理至关重要,以下将详细介绍Hadoop Shell中常用的命令,涵盖文件系统操作、权限管理、集群状态查看等多个方面,并通过表格形式汇总关键命令,帮助用户高效掌握。

Hadoop Shell命令以hadoop fs
或hdfs dfs
开头(两者功能基本一致,hdfs dfs
更侧重HDFS操作),后续跟具体子命令,文件与目录管理是最常用的操作。-ls
命令用于列出指定路径下的文件和目录,例如hadoop fs -ls /
可查看HDFS根目录内容;-mkdir
用于创建目录,支持多级目录创建,如hadoop fs -mkdir -p /user/input/data
;-put
和-copyFromLocal
均用于将本地文件上传至HDFS,区别在于-put
还可用于从HDFS到HDFS的复制,而-copyFromLocal
仅支持本地到HDFS;-get
和-copyToLocal
用于从HDFS下载文件到本地,-get
支持下载到标准输出,-copyToLocal
则更灵活;-moveFromLocal
可将本地文件移动至HDFS,原文件会被删除;-mv
用于在HDFS内部移动或重命名文件/目录;-cp
用于复制HDFS内的文件/目录;-rm
删除文件,-rm -r
删除目录及其内容;-du
显示文件大小,-dus
汇总目录总大小;-cat
查看文件内容,适用于小文件,大文件建议用-tail
查看末尾内容,这些命令是日常操作的基础,熟练使用可大幅提升文件管理效率。
权限与所有权管理在多用户环境中尤为重要。-chown
用于修改文件/目录的所有者,格式为hadoop fs -chown [owner][:group] path
,例如hadoop fs -chown hadoop:user /data
将/data
的所有者改为hadoop
,所属组改为user
;-chgrp
修改所属组,如hadoop fs -chgrp hadoop /data
;-chmod
修改权限,支持八进制模式(如755
)或符号模式(如u+r
),例如hadoop fs -chmod 755 /dir
设置目录权限为所有者可读写执行、组和其他用户可读执行,通过这些命令,可以实现对HDFS资源访问的精细化控制,确保数据安全。
HDFS的磁盘空间管理也是运维重点。-df
命令用于查看HDFS整体磁盘使用情况,例如hadoop fs -df -h
以人类可读格式显示各目录的剩余空间;-count
统计目录下的文件数量、目录数量及占用空间,如hadoop fs -count /user
可快速获取用户目录的文件统计信息。-expunge
用于清空HDFS的垃圾回收站(Trash),执行后无法恢复被删除的文件,需谨慎使用。
对于HDFS的高级操作,-distcp
是分布式复制工具,可实现集群间或集群内的海量数据复制,例如hadoop distcp -update -delete hdfs://cluster1/data hdfs://cluster2/backup
会增量同步cluster1
的data
目录到cluster2
的backup
,并删除目标目录中已不存在的文件;-setrep
修改文件副本数,如hadoop fs -setrep 3 /largefile
将大文件副本数设置为3(默认为3,可根据集群节点数调整);-touchz
创建空文件,-test
测试文件是否存在(-e
)、是否为文件(-f
)或是否为目录(-d
),例如hadoop fs -test -e /file
检查文件是否存在,并返回相应退出状态码。

以下是常用Hadoop Shell命令的汇总表格:
命令分类 | 命令格式 | 功能描述 | 示例 |
---|---|---|---|
文件/目录列表 | hadoop fs -ls <path> |
列出指定路径下的文件和目录 | hadoop fs -ls /user |
创建目录 | hadoop fs -mkdir [-p] <path> |
创建目录,-p 支持多级目录创建 |
hadoop fs -mkdir -p /data/input |
上传文件 | hadoop fs -put <local> <hdfs> |
本地文件上传至HDFS | hadoop fs -put local.txt /data/ |
下载文件 | hadoop fs -get <hdfs> <local> |
HDFS文件下载至本地 | hadoop fs -get /data/file.txt ./ |
移动文件 | hadoop fs -mv <src> <dst> |
在HDFS内移动或重命名文件/目录 | hadoop fs -mv /old /new |
复制文件 | hadoop fs -cp <src> <dst> |
复制HDFS内的文件/目录 | hadoop fs -cp /file1 /file2 |
删除文件 | hadoop fs -rm [-r] <path> |
删除文件,-r 删除目录及其内容 |
hadoop fs -rm -r /temp |
查看文件大小 | hadoop fs -du [-s] <path> |
显示文件大小,-s 汇总目录总大小 |
hadoop fs -du -s /user |
查看文件内容 | hadoop fs -cat <file> |
查看文件内容 | hadoop fs -cat /data.log |
修改所有者 | hadoop fs -chown <owner>:<group> <path> |
修改文件/目录的所有者和所属组 | hadoop fs -chown user:group /file |
修改权限 | hadoop fs -chmod <mode> <path> |
修改文件/目录权限 | hadoop fs -chmod 644 /file |
查看磁盘空间 | hadoop fs -df [-h] <path> |
查看HDFS磁盘使用情况,-h 以人类可读格式显示 |
hadoop fs -df -h / |
统计目录信息 | hadoop fs -count <path> |
统计目录下的文件数、目录数及占用空间 | hadoop fs -count /user |
在实际使用中,需要注意HDFS命令的执行效率和资源消耗,对小文件频繁执行-cat
可能导致NameNode压力过大,此时可考虑使用-text
命令自动识别文本格式;对大文件操作时,建议在非高峰期执行,避免影响集群性能,Hadoop Shell命令支持通配符,如hadoop fs -ls /user/*.txt
可批量匹配.txt
文件,提升操作灵活性。
相关问答FAQs:
-
问:Hadoop Shell中
hadoop fs
和hdfs dfs
命令有什么区别?
答:hadoop fs
是通用文件系统命令,支持多种文件系统(如HDFS、Local FS等),而hdfs dfs
是专门针对HDFS的命令,功能上两者基本一致,但hdfs dfs
更明确指向HDFS操作,在实际使用中,推荐优先使用hdfs dfs
,以避免与其他文件系统命令混淆。(图片来源网络,侵删) -
问:如何批量删除HDFS中满足特定条件的文件(如所有
.tmp
文件)?
答:可通过hadoop fs -rm
命令结合通配符实现批量删除,例如执行hadoop fs -rm /data/*.tmp
可删除/data
目录下所有扩展名为.tmp
的文件,如果需要递归删除子目录中的文件,可使用hadoop fs -rm -r /data/**/*.tmp
(需Hadoop版本支持通配符),注意:删除操作不可逆,建议先通过hadoop fs -ls
确认文件列表,避免误删重要数据。