求助:Hadoop集群上WordCount应用无法正常运行
Hadoop Streaming WordCount任务停滞(进度0)排查方案
基础配置与路径问题核对
- 输入输出路径类型检查:命令里的
-input /main/data.txt和-output /main/output是HDFS路径,而非本地路径。先执行hdfs dfs -ls /main确认data.txt存在,且output路径不存在(Hadoop不允许输出路径提前存在,若输入路径不存在,任务会持续等待)。如果是本地文件,先上传到HDFS:hdfs dfs -put /本地路径/data.txt /main/。 - 脚本权限与节点同步:确保
mapper.py和reducer.py在集群所有节点的/home/hdoop/目录下都存在,且有执行权限。执行chmod +x /home/hdoop/mapper.py /home/hdoop/reducer.py给脚本加权限,同时脚本第一行必须指定解释器,比如#!/usr/bin/env python3(根据实际Python版本调整),否则Task节点无法执行脚本。
集群资源状态检查
- 访问
http://localhost:8088/cluster/nodes查看NodeManager节点状态,确认有处于RUNNING状态的节点,且节点有可用的内存、CPU资源。若所有节点不可用,任务无法分配容器,会一直停滞。 - 查看任务日志:在8088的应用详情里找到对应Task(如Mapper任务),点击日志链接查看具体错误——脚本找不到、权限不足、Python环境缺失等问题都会在日志中体现,这是最直接的排查方式。
脚本适配Hadoop环境验证
- 本地运行脚本时可能直接读文件,但Hadoop Streaming通过标准输入输出传递数据,确保脚本从
sys.stdin读取输入,而非硬编码本地文件路径。比如mapper.py核心逻辑应为:
import sys for line in sys.stdin: line = line.strip() words = line.split() for word in words: print(f"{word}\t1")
- 确认集群节点安装对应Python环境:执行
ssh 节点IP python3 --version,确保所有Task节点都有匹配的Python环境,且路径与脚本头指定的一致。
其他潜在问题排查
- 网络与防火墙:确保集群节点间通信正常(9000、8088、8042等端口开放),NameNode和ResourceManager能与NodeManager正常通信。
- HDFS权限:执行
hdfs dfs -chmod 755 /main确保输入路径有读权限,执行用户具备HDFS操作权限。
内容的提问来源于stack exchange,提问作者Muhammad Shamil Umar
相关产品推荐
相关产品推荐

