Hadoop Streaming词频任务失败求助:PipeMapRed子进程报错code 2
解决Hadoop Streaming词频统计任务的
PipeMapRed.waitOutputThreads()错误 这个错误码2通常是Python脚本执行失败导致的,按以下步骤排查:
检查脚本的路径、权限与shebang行
- 确保
/home/hadoop/mapper.py和/home/hadoop/reducer.py在所有Hadoop节点(包括DataNode)上都存在,Streaming会将脚本分发到各节点执行,仅主节点存在会报错。 - 给脚本添加执行权限:
chmod +x /home/hadoop/mapper.py /home/hadoop/reducer.py - 在两个脚本的第一行添加shebang,指定Python解释器路径:
若节点上Python3的绝对路径不同(比如#!/usr/bin/env python3/usr/bin/python3),直接写该路径更稳妥。
- 确保
本地验证脚本功能
- 单独测试mapper:
预期输出每行一个拆分后的单词,若报错则说明mapper有语法或逻辑问题。echo "hello world hello test" | python3 /home/hadoop/mapper.py - 测试完整流程:
预期输出正确的词频统计结果,若失败直接排查reducer的问题。echo "hello world hello test" | python3 /home/hadoop/mapper.py | sort | python3 /home/hadoop/reducer.py - 检查脚本语法:
有语法错误会直接提示,修复后再重新提交任务。python3 -m py_compile /home/hadoop/mapper.py /home/hadoop/reducer.py
- 单独测试mapper:
确认集群节点的Python环境
- 所有DataNode节点必须安装Python3,且
python3命令能正常执行。可以在任意DataNode上执行which python3获取绝对路径,替换Streaming命令中的python3,避免因环境变量差异导致找不到解释器。
- 所有DataNode节点必须安装Python3,且
检查HDFS路径问题
- 确认输入路径
/user/input.txt存在且不为空:hdfs dfs -ls /user/input.txt - Hadoop不允许输出目录已存在,执行任务前先删除旧输出目录:
hdfs dfs -rm -r /output2
- 确认输入路径
查看详细日志定位具体错误
- 登录ResourceManager Web UI(默认端口8088),找到失败的任务,查看对应Container的日志,里面会包含Python脚本的具体报错信息(如权限拒绝、模块缺失、输入输出错误等),这是精准定位问题的核心依据。
内容的提问来源于stack exchange,提问作者I211381 Eeman Ijaz
相关产品推荐
相关产品推荐

