Cloudera虚拟机上MapReduce任务成功却无输出问题求助
排查MapReduce任务无输出(Map输出0条)问题
核心现象
- MapReduce任务显示执行成功,但输出文件为空
- 任务计数器数据:Map输入记录103条,Map输出记录0条,Reducer无输入、无输出
环境信息
- Hadoop MapReduce 2.6.0
- 运行环境:Cloudera虚拟机 + Eclipse
- Java版本:1.7.0
- JSON解析依赖:Jackson 2.2.3
重点排查方向
1. JSON解析失败导致Mapper未生成输出
- 检查输入JSON格式是否与你的实体类字段完全匹配(包括字段名大小写、嵌套结构),不匹配会直接导致解析失败
- 查看Mapper中是否捕获了解析异常但未记录日志,导致解析失败的记录被静默跳过
- 在解析代码块中添加日志(比如
LOG.info()或System.out.println()),统计解析成功/失败的记录数,确认是否存在批量解析失败的情况
2. Mapper未正确触发context.write()
- 检查是否有条件判断逻辑(比如打击率计算的前置过滤)导致所有记录都不满足输出条件
- 验证条件判断是否有误,例如是否错误过滤了有效记录(比如把击球次数>0的判断写成了==0)
- 确认
context.write()的键值对类型与Driver中设置的MapOutputKeyClass、MapOutputValueClass完全一致,类型不匹配会导致输出被静默丢弃
3. Jackson依赖未正确打包到Job Jar
- Hadoop集群运行时默认不包含Jackson 2.2.3依赖,需确认导出的Jar包是否包含Jackson的class文件
- Eclipse导出Jar时选择「Extract required libraries into generated JAR」,确保依赖被打包进Jar
- 解压Jar包检查,确认存在
com.fasterxml.jackson开头的包结构
4. 输入数据读取格式错误
- 检查Driver中设置的
InputFormat是否适配JSON输入,若使用自定义输入格式,需确认其能正确拆分每条JSON记录 - 排查输入文件是否存在空行或不符合JSON规范的行,这类数据会导致Mapper读取后无法解析
5. Mapper任务日志排查
- 通过Cloudera的YARN界面查看Mapper任务的运行日志,搜索
JsonParseException、IOException等异常信息 - 日志中可能存在任务成功但记录处理失败的细节,这是关键排查线索
调试步骤建议
- 编写本地测试类,读取单条输入JSON数据,验证你的Jackson解析逻辑是否能正确解析并计算打击率
- 简化Mapper逻辑,先跳过计算逻辑,直接将输入记录原样输出,验证是否能产生Map输出
- 在Mapper中添加详细日志,打印每条输入记录内容、解析结果、是否执行到
write()方法 - 检查Driver中Mapper、Reducer类的配置是否正确,输出路径是否存在且未被覆盖
内容的提问来源于stack exchange,提问作者Kaivalya
相关产品推荐
相关产品推荐

