执行Hadoop命令是大数据处理工作中非常基础且重要的技能,Hadoop作为分布式存储和计算框架,其命令行工具(Hadoop Shell)提供了丰富的操作接口,用户可以通过命令对HDFS文件系统进行管理、运行MapReduce作业、管理YARN资源等,以下将从Hadoop命令的基础结构、常用操作场景、高级功能及注意事项等方面进行详细说明。

Hadoop命令的基本结构为hadoop [generic options] [command] [command options]
,其中generic options
是所有命令共通的全局参数,如-conf
指定配置文件路径、-D
设置属性值、-fs
指定默认文件系统URI等;command
则是具体的操作命令,如fs
(文件系统操作)、jar
(运行Jar包)、distcp
(分布式复制)等;command options
为特定命令的参数,通过hadoop fs -ls /
可以查看HDFS根目录下的文件列表,其中fs
是文件系统操作命令,-ls
是其选项。
HDFS文件系统操作
HDFS文件系统操作是Hadoop命令中最常用的部分,类似于Linux的文件命令,但针对分布式环境进行了优化,常用命令包括:
-
基本文件操作
ls
:列出目录内容,如hadoop fs -ls /user
显示/user
下的所有文件和目录;使用-R
选项可递归列出子目录,类似ls -R
。mkdir
:创建目录,如hadoop fs -mkdir /data/input
创建输入目录;-p
选项可创建多级目录(如mkdir -p /data/input/2023
)。put
和copyFromLocal
:将本地文件上传至HDFS,前者支持从标准输入读取,后者仅支持本地文件路径,例如hadoop fs -put local.txt /data/input/
或hadoop fs -copyFromLocal local.txt /data/input/
。get
和copyToLocal
:从HDFS下载文件到本地,如hadoop fs -get /data/output/result.txt .
将文件下载到当前目录。rm
:删除文件或目录,-r
选项用于递归删除目录(如rm -r /data/temp
)。mv
:移动或重命名文件,如hadoop fs -mv /data/input/file1.txt /data/input/backup.txt
。
-
高级文件操作
(图片来源网络,侵删)du
:查看文件或目录大小,-h
选项以人类可读格式显示(如du -h /data/output
),-s
仅汇总总大小。df
:查看HDFS整体使用情况,如hadoop fs -df -h /
显示根目录的容量、已用空间等。cat
:查看文件内容,适用于小文件,如hadoop fs -cat /data/input/log.txt
。chmod
和chown
:修改文件权限和所有者,如hadoop fs -chmod 755 /data/script.sh
设置权限,chown hadoop:hadoop /data/input
修改所有者。
MapReduce与YARN操作
Hadoop除了文件系统管理,还支持通过命令运行MapReduce作业和管理YARN集群资源。
-
运行MapReduce作业
使用hadoop jar
命令提交Jar包形式的MapReduce程序,基本语法为hadoop jar <jar-file> <main-class> <args>
,运行Hadoop自带的WordCount示例:hadoop jar hadoop-mapreduce-examples-*.jar wordcount /data/input /data/output
其中
wordcount
为主类名,/data/input
为输入路径,/data/output
为输出路径(需确保输出目录不存在)。 -
YARN资源管理命令
yarn jar
:与hadoop jar
类似,但更侧重YARN资源调度,可指定队列、内存等参数,如yarn jar -Dmapreduce.job.queuename=queue1 myjob.jar MyJob input output
。yarn application
:管理YARN应用,如yarn application -list
列出所有应用,-kill <app-id>
终止指定应用,-status <app-id>
查看应用状态。
Hadoop集群管理命令
Hadoop还提供了集群管理工具,用于监控和维护集群状态。
-
HDFS平衡与检查
hadoop balancer
:平衡HDFS集群中各DataNode的存储使用率,默认阈值为10%,可通过-threshold
调整(如hadoop balancer -threshold 5
)。hadoop fsck
:检查HDFS文件完整性,如hadoop fsck /data -files -blocks
显示文件块分布情况。
-
Hadoop守护进程管理
虽然通常通过start-dfs.sh
/stop-dfs.sh
等脚本管理,但也可直接调用hadoop-daemon.sh
启动单个守护进程,如hadoop-daemon.sh start namenode
。
注意事项与最佳实践
- 权限与安全:HDFS文件权限基于Linux用户/组,操作时需确保当前用户对目标路径有足够权限;启用Kerberos认证的集群需提前获取票据。
- 性能优化:上传大文件时使用
-chunksize
参数调整块大小(默认128MB);避免在HDFS上存储大量小文件,可通过HAR
归档或SequenceFile
格式优化。 - 错误排查:命令失败时,可通过
-Dhadoop.debug=true
开启调试模式,或查看YARN的Web UI(默认地址http://<ResourceManager>:8088
)获取应用日志。
相关问答FAQs
Q1: 执行Hadoop命令时提示“Permission denied”,如何解决?
A: 此错误通常是由于当前用户对HDFS目标路径缺少操作权限,可通过hadoop fs -chown
修改文件所有者,或使用hadoop fs -chmod
调整权限,若用户hadoop
需对/data/input
有读写权限,执行hadoop fs -chmod 755 /data/input
,确保HDFS集群未启用Kerberos认证,或已通过kinit
获取有效票据。
Q2: 如何查看Hadoop MapReduce作业的执行日志?
A: MapReduce作业的日志可通过YARN的Web UI查看:访问ResourceManager的Web界面(默认端口8088),在“Applications”列表中找到目标作业,点击“Logs”链接即可查看详细日志,也可通过命令行获取,如yarn logs -applicationId <app-id>
下载指定作业的日志包,或hadoop job -history <output-dir>
查看历史作业的摘要信息(需确保作业历史服务器已启动)。