基于Python脚本的Hadoop Streaming MapReduce任务执行失败求助
Hadoop Streaming 找不到Python脚本的故障排查方案
1. 检查脚本的Shebang头是否正确
Python脚本必须在第一行声明解释器路径,否则Hadoop不知道用什么来执行它。Ubuntu 22.04默认用Python3,所以确保mapper.py和reducer.py的第一行是:
#!/usr/bin/env python3
如果写的是#!/usr/bin/python,可能因为系统没有这个软链接导致报错。可以直接在本地执行/home/mohamed/mapper.py测试,要是提示“找不到命令”,就是Shebang的问题。
2. 用-file参数分发脚本到集群节点
你把脚本存在本地/home/mohamed,但Hadoop的任务是在集群各个节点上运行的,这些节点的本地目录里并没有这个脚本。必须通过-file参数将脚本上传到任务的分布式缓存,让所有节点能访问到。
正确的Hadoop Streaming命令格式应该是:
hadoop jar $HADOOP_HOME/share/hadoop/tools/lib/hadoop-streaming-3.3.6.jar \ -file /home/mohamed/mapper.py \ -mapper mapper.py \ -file /home/mohamed/reducer.py \ -reducer reducer.py \ -input /your_hdfs_input_path \ -output /your_hdfs_output_path
注意:-mapper和-reducer后面只需要写脚本文件名,不需要绝对路径,因为-file已经把脚本同步到了每个节点的临时工作目录。
3. 确认目录和文件的访问权限
虽然你给脚本设了777权限,但还要检查上级目录的权限:
- 执行
ls -ld /home/mohamed,确保目录权限至少是755(即其他用户有读和执行权限),如果不够就改:chmod 755 /home/mohamed - 切换到Hadoop运行的用户(比如
hdfs或yarn),执行ls /home/mohamed/mapper.py,确认该用户能看到脚本。如果看不到,需要调整目录或文件的权限,或者把脚本放到Hadoop用户能访问的目录下。
4. 再次核对路径的拼写和大小写
Linux系统是大小写敏感的,仔细检查命令里的路径有没有拼写错误,比如Mapper.py和mapper.py是两个不同的文件。可以用ls /home/mohamed/mapper.py确认文件确实存在。
内容的提问来源于stack exchange,提问作者Mohamed MOUHNARI
相关产品推荐
相关产品推荐

