Hadoop的jar命令是执行Hadoop作业的核心工具,主要用于提交和运行打包在JAR文件中的MapReduce、Spark或其他大数据计算框架的程序,该命令通过Hadoop的YARN(Yet Another Resource Negotiator)或MapReduce框架将任务分发到集群节点执行,并支持丰富的参数配置以控制作业的行为,以下从命令结构、核心参数、常见用法及注意事项等方面进行详细说明。

命令基本结构
Hadoop jar命令的基本语法为:
hadoop jar [jar文件路径] [主类名] [程序参数] [Hadoop参数]
[jar文件路径]
是包含用户代码的JAR文件,[主类名]
是JAR中包含main方法的类全名,[程序参数]
是用户代码所需的参数(如输入输出路径),[Hadoop参数]
则是Hadoop框架提供的配置选项。
核心参数详解
Hadoop jar命令的参数可分为两类:用户程序参数和Hadoop框架参数,后者通过-D
选项或前缀指定,用于控制资源分配、日志级别、任务重试等行为,以下是常用参数及其作用:
资源与调度参数
参数 | 说明 | 示例 |
---|---|---|
-D mapreduce.job.queuename |
指定作业提交的YARN队列 | hadoop jar myjob.jar -D mapreduce.job.queuename=production |
-D mapreduce.map.memory.mb |
设置每个Map任务的内存上限(MB) | -D mapreduce.map.memory.mb=2048 |
-D mapreduce.reduce.memory.mb |
设置每个Reduce任务的内存上限(MB) | -D mapreduce.reduce.memory.mb=4096 |
-D mapreduce.map.tasks |
设置Map任务数量(通常由框架自动计算) | -D mapreduce.map.tasks=100 |
-D mapreduce.reduce.tasks |
设置Reduce任务数量 | -D mapreduce.reduce.tasks=10 |
任务执行与调试参数
参数 | 说明 | 示例 |
---|---|---|
-D mapreduce.job.reduce.speculative |
是否启用Reduce任务推测执行 | -D mapreduce.job.reduce.speculative=false |
-D mapreduce.task.timeout |
任务超时时间(毫秒) | -D mapreduce.task.timeout=600000 |
-D mapreduce.job.maxtaskfailures.per.tracker |
单个TaskTracker最大失败任务数 | -D mapreduce.job.maxtaskfailures.per.tracker=4 |
-verbose |
输出详细执行日志 | hadoop jar -verbose myjob.jar |
输入输出参数
参数 | 说明 | 示例 |
---|---|---|
-input |
指定输入路径(可通过程序参数传递) | hadoop jar myjob.jar -input /data/input |
-output |
指定输出路径(需为空目录) | hadoop jar myjob.jar -output /data/output |
其他高级参数
参数 | 说明 | 示例 |
---|---|---|
-archives |
提交归档文件(如ZIP)到集群 | -archives /lib.zip#lib |
-files |
提交依赖文件到任务节点 | -files config.properties |
-libjars |
提交依赖JAR包到类路径 | -libjars mysql-connector-java.jar |
常见用法示例
-
基本MapReduce作业提交
(图片来源网络,侵删)hadoop jar wordcount.jar WordCount /input /output
其中
WordCount
是主类名,/input
和/output
分别为输入输出路径。 -
指定队列和内存
hadoop jar myjob.jar -D mapreduce.job.queuename=production \ -D mapreduce.map.memory.mb=3072 MyJob /data/input /data/output
-
携带依赖文件
hadoop jar streaming.jar -mapper mapper.py -reducer reducer.py \ -input /input -output /output -files mapper.py,reducer.py
注意事项
- JAR文件要求:主类必须包含
public static void main(String[] args)
方法,且JAR需包含所有依赖或通过-libjars
指定。 - 输出路径冲突:输出路径必须不存在,否则作业会失败。
- 参数优先级:命令行参数会覆盖
core-site.xml
等配置文件中的默认值。 - 日志查看:可通过YARN的Web UI(默认地址
http://<ResourceManager>:8088
)查看任务日志和状态。
相关问答FAQs
Q1: 如何调试Hadoop作业失败问题?
A1: 可通过以下步骤排查:
- 检查YARN Web UI中的任务失败日志,点击“Failed”任务查看
stderr
。 - 使用
-D mapreduce.task.debugout
指定调试输出路径,捕获任务中间结果。 - 确保输入路径存在且权限正确,输出路径为空。
- 本地测试代码逻辑,使用
hadoop jar --help
验证参数格式。
Q2: 如何优化Hadoop作业的性能?
A2: 优化方向包括:
- 资源分配:根据数据量和集群负载调整
mapreduce.map/reduce.memory.mb
和mapreduce.map/reduce.tasks
。 - 数据倾斜处理:对Reduce任务启用
-D mapreduce.job.reduce.speculative=true
,或自定义分区器。 - I/O优化:使用压缩(如
-D mapreduce.map.output.compress=true
)减少数据传输量。 - 缓存管理:对小文件使用
-archives
或-files
分发,避免重复读取HDFS。