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

Hadoop Streaming任务报错java.lang.RuntimeException求助

Hadoop集群运行Ego Network最大圈子计算任务时出现java.lang.RuntimeException故障排查

我需要在ego network中找出拥有最大圈子的节点及其大小,本地通过管道运行Python的Mapper和Reducer代码完全正常,输出最大圈子大小为308,但提交到Hadoop集群执行时触发java.lang.RuntimeException,任务直接失败。


一、输入文件示例

输入文件为ego network的节点圈子列表,每行格式如下:

节点ID 圈子内节点ID1,节点ID2,...
示例内容:
0 1,2,3,4
1 0,2,5,6
2 0,1,7,8,9

二、Mapper和Reducer代码

Mapper代码(mapper.py)

import sys

for line in sys.stdin:
    line = line.strip()
    if not line:
        continue
    parts = line.split()
    ego_node = parts[0]
    circle_nodes = parts[1].split(',')
    circle_size = len(circle_nodes)
    print(f"{ego_node}\t{circle_size}")

Reducer代码(reducer.py)

import sys

max_size = 0
max_node = None

for line in sys.stdin:
    line = line.strip()
    if not line:
        continue
    node, size_str = line.split('\t')
    try:
        size = int(size_str)
    except ValueError:
        continue
    if size > max_size:
        max_size = size
        max_node = node

print(f"{max_node}\t{max_size}")

三、集群运行命令

hadoop jar $HADOOP_HOME/share/hadoop/tools/lib/hadoop-streaming-*.jar \
  -files /home/aosaf/Documents/semester5/MMDS/mapper.py,/home/aosaf/Documents/semester5/MMDS/reducer.py \
  -mapper mapper.py \
  -reducer reducer.py \
  -input /user/aosaf/facebook \
  -output /user/aosaf/facebook_max_circle_output

四、报错日志及任务执行详情

java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 1
at org.apache.hadoop.streaming.PipeMapRed.waitOutputThreads(PipeMapRed.java:320)
at org.apache.hadoop.streaming.PipeMapRed.mapRedFinished(PipeMapRed.java:533)
at org.apache.hadoop.streaming.PipeMapper.close(PipeMapper.java:130)
at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:61)
at org.apache.hadoop.streaming.PipeMapRunner.run(PipeMapRunner.java:34)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:465)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:349)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:174)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1730)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:168)
任务尝试1失败,退出状态为1,原因:进程退出,退出码1


故障排查与解决建议

  1. 对齐集群与本地的Python环境
    本地使用python3,但集群节点可能默认Python版本为2.x,或未配置python3命令。解决方式:

    • 在Mapper和Reducer脚本开头添加指定解释器的shebang:
      #!/usr/bin/env python3
      
    • 或在Hadoop命令中显式指定Python路径:
      -mapper "python3 mapper.py" \
      -reducer "python3 reducer.py"
      
  2. 修复脚本权限问题
    确保脚本在集群上有可执行权限:

    • 本地执行chmod +x mapper.py reducer.py后再通过-files参数上传
    • 或在命令中临时添加权限配置:
      -mapper "chmod +x mapper.py && python3 mapper.py"
      
  3. 验证集群输入文件的一致性
    确认HDFS输入路径/user/aosaf/facebook下的文件格式、编码与本地完全一致,无异常空行或特殊字符。可通过以下命令查看集群输入内容:

    hdfs dfs -cat /user/aosaf/facebook/* | head -10
    
  4. 查看脚本的stderr日志
    通过YARN WebUI(如http://<resource-manager-ip>:8088)定位对应任务,查看Container日志中的stderr部分,里面会包含Python脚本的具体错误信息(如语法错误、依赖缺失)。

  5. 在集群节点上手动测试脚本
    登录任意Worker节点,上传脚本和测试数据,手动运行验证:

    echo "0 1,2,3,4" | python3 mapper.py | python3 reducer.py
    

    排查节点本地的环境或脚本执行问题。

内容的提问来源于stack exchange,提问作者hertz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 23:11:00