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确认文件列表,避免误删重要数据。
