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

Linux下Hadoop Streaming运行Python MapReduce任务失败的求助

解决Hadoop Streaming执行Python脚本的换行符与路径问题

问题根源

错误提示里的python 包含了Windows风格的换行符(\r),说明你的mapper.py和reducer.py是在Windows环境下编辑的,换行符为CRLF(\r\n),而Hadoop集群的Linux系统只识别LF(\n)换行符,导致shebang行被解析为#!/usr/bin/env python\r,系统找不到名为python\r的命令。另外,当文件不在同一目录时,Hadoop节点可能无法获取到脚本文件。

解决方案

1. 修复脚本换行符

将脚本的CRLF换行符替换为LF:

  • 命令行方式:在Linux环境中执行以下命令修改两个脚本:
    sed -i 's/\r$//' mapper.py reducer.py
    
  • 编辑器方式:用VS Code、Sublime等编辑器打开脚本,右下角切换换行符为LF,保存后重新上传到集群。

2. 修正shebang行

确保脚本第一行的shebang格式正确:

  • 优先使用集群中Python的绝对路径(先执行which python或which python3查看路径),比如:
    #!/usr/bin/python3
    
  • 避免使用可能存在环境变量问题的#!/usr/bin/env python,如果一定要用,确保集群所有节点的环境变量中能找到python命令。

3. 给脚本添加执行权限

在本地或集群上执行命令,赋予脚本可执行权限:

chmod +x mapper.py reducer.py

4. 提交任务时正确分发脚本

执行Hadoop Streaming任务时,必须用-files参数将脚本上传到分布式缓存,确保所有节点都能获取到脚本,示例命令:

hadoop jar $HADOOP_HOME/share/hadoop/tools/lib/hadoop-streaming-*.jar \
  -files mapper.py,reducer.py \
  -mapper mapper.py \
  -reducer reducer.py \
  -input /hdfs/path/to/diamonds.txt \
  -output /hdfs/path/to/result_output

注意:-input和-output需要使用HDFS路径,而非本地路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 00:13:28