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

在Hadoop集群运行mrjob MapReduce代码时安装numpy等Python模块的问题

问题描述

我尝试在Hadoop集群中使用Python mrjob运行MapReduce任务,但在安装numpy、pandas等外部模块时遇到了问题。该任务在本地运行正常,但提交到Hadoop集群后失败,报错显示PipeMapRed子进程退出码为1,我推测问题出在无法导入numpy。


相关文件内容

1. mrjob代码示例

from mrjob.job import MRJob
import numpy as np

class MyMRJob(MRJob):
    def mapper(self, _, line):
        data = np.array([float(x) for x in line.split()])
        yield "sum", data.sum()

    def reducer(self, key, values):
        yield key, sum(values)

if __name__ == '__main__':
    MyMRJob.run()

2. mrjob.conf配置文件

runners:
  hadoop:
    hadoop_bin: /path/to/hadoop
    hadoop_streaming_jar: /path/to/hadoop-streaming.jar
    python_bin: python3

3. 任务失败输出日志

...
PipeMapRed.waitOutputThreads(): subprocess failed with code 1
Traceback (most recent call last):
  File "my_job.py", line 2, in <module>
    import numpy as np
ImportError: No module named numpy
...

解决方案

方法1:集群全节点安装依赖

登录Hadoop集群的每台DataNode节点,确保所有节点的Python环境与本地一致,然后安装所需依赖:

# 以pip3为例,根据实际Python版本调整
pip3 install numpy pandas

方法2:用mrjob的setup参数打包虚拟环境依赖

  1. 在本地创建并激活虚拟环境,安装所有依赖:
    python3 -m venv mrjob_env
    source mrjob_env/bin/activate
    pip install numpy pandas mrjob
    
  2. 提交任务时通过--archive和--setup参数将依赖上传到集群:
    # 替换python3.x为实际Python版本号
    python my_job.py -r hadoop hdfs://path/to/input \
    --archive=mrjob_env/lib/python3.x/site-packages#deps \
    --setup='export PYTHONPATH=$PYTHONPATH:./deps'
    
    如果集群无外网,跳过在线安装,直接打包本地已装好的依赖即可

方法3:离线打包依赖源码/二进制包上传

  1. 下载numpy、pandas的离线安装包(如.tar.gz或.whl)到任务脚本同目录
  2. 提交任务时通过--archive上传并安装:
    python my_job.py -r hadoop hdfs://path/to/input \
    --archive=numpy-1.24.3.tar.gz#numpy \
    --archive=pandas-2.0.3.tar.gz#pandas \
    --setup='cd numpy && pip install .; cd ../pandas && pip install .'
    

方法4:配置共享存储依赖路径

将numpy、pandas安装到集群所有节点均可访问的共享存储(如NFS挂载目录、HDFS本地挂载点),然后修改mrjob.conf:

runners:
  hadoop:
    hadoop_bin: /path/to/hadoop
    hadoop_streaming_jar: /path/to/hadoop-streaming.jar
    python_bin: python3
    setup_cmds:
      - 'export PYTHONPATH=/path/to/shared/deps:$PYTHONPATH'

验证步骤
  1. 在任意DataNode节点执行以下命令,确认依赖可正常导入:
    python3 -c "import numpy; import pandas; print('依赖导入成功')"
    
  2. 验证通过后再提交mrjob任务,确认运行状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 02:10:54