You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hadoop Streaming结合Python运行失败,执行脚本报PipeMapRed错误求助

解决Hadoop Streaming + Python任务失败(subprocess code 2)的问题

你的任务报错subprocess failed with code 2,这是Hadoop在尝试运行Python脚本(通常是Mapper)时出现了子进程执行失败的问题,大概率和脚本的可执行性、语法或者环境配置有关,我整理了几个常见的排查和解决步骤:

1. 给Python脚本添加可执行权限

Hadoop需要能直接执行你的mapper和reducer脚本,所以先给两个脚本加上执行权限:

chmod +x /home/carlos/mapper.py /home/carlos/reducer.py

2. 确保脚本开头的Shebang正确配置

脚本的第一行必须明确指定Python解释器的路径,否则Hadoop不知道用什么程序来运行脚本。推荐用兼容的写法:

#!/usr/bin/env python

或者如果你用的是Python3,就写:

#!/usr/bin/env python3

注意:要保证你的集群环境里能找到对应的Python解释器,比如如果是自定义安装的Python,要写绝对路径,比如#!/usr/local/bin/python3

3. 本地测试脚本是否正常工作

在提交到Hadoop之前,先在本地环境测试脚本的功能,排查语法或逻辑错误:

  • 测试Mapper:
cat /home/carlos/word.txt | ./mapper.py

预期输出应该是每个单词单独一行,格式为单词 1,比如:

hello 1
world 1
  • 测试完整的MapReduce流程:
cat /home/carlos/word.txt | ./mapper.py | sort | ./reducer.py

如果这一步能正常输出单词统计结果,说明脚本本身逻辑没问题;如果报错,那就是脚本有语法错误,先修复本地的问题再提交Hadoop任务。

4. 检查HDFS路径的正确性

  • 确认输入路径/Streaming/word.txt在HDFS上存在:
hadoop fs -ls /Streaming

如果文件不存在,先把本地的word.txt上传到HDFS:

hadoop fs -put /home/carlos/word.txt /Streaming/
  • Hadoop不允许输出路径提前存在,所以要先删除已有的输出目录:
hadoop fs -rm -r /Streaming/WordCount.txt

5. 查看详细任务日志定位问题

如果上面的步骤都无法解决,可以查看Yarn的详细日志获取更多报错信息:

yarn logs -applicationId <你的应用ID>

应用ID可以从错误日志里的job_1515762484609_0001对应的Application ID找到(通常在任务启动的日志里会显示,或者通过yarn application -list查看),日志里会包含Python脚本执行时的具体报错(比如模块缺失、语法错误等)。


内容的提问来源于stack exchange,提问作者Carlos Arbeláez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:56:30