Hadoop集群部署常见问题
很多小伙伴搭建Hadoop集群时,总会卡在环境配置、进程启动、集群通信、权限报错等各种问题上,反复踩坑、耗时耗力。本文整理了Hadoop3.x 集群部署最常见的10类故障,涵盖SSH免密、HDFS启动、YARN异常、端口冲突、配置报错等场景,所有命令可直接复制使用,适合新手部署、线上集群排错、面试复盘。
✅ 适用版本:Hadoop3.3.x、CentOS7/8、Ubuntu20.04
✅ 全文无冗余,只讲现象、原因、实操解决方案
一、前置环境问题(90%部署报错的根源)
问题1:SSH免密登录失败,集群启动需重复输密码
故障现象 :执行 start-dfs.sh / start-yarn.sh 时,各个子节点需要手动输入密码,集群启动中断。
核心原因:SSH密钥未生成、公钥未授权、.ssh目录权限过高、节点主机名映射错误。
一键解决方案(所有节点执行)
bash
# 1. 生成ssh密钥(一路回车无需输入密码)
ssh-keygen -t rsa
# 2. 分发公钥到所有节点(包含本机)
ssh-copy-id localhost
ssh-copy-id master
ssh-copy-id slave1
ssh-copy-id slave2
# 3. 修复授权文件权限(关键!权限过大会失效)
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
# 4. 测试免密(无需输密码即为成功)
ssh master
ssh slave1
问题2:防火墙/SELinux拦截集群通信,节点不通
故障现象:进程启动成功,但Web页面无法访问、节点心跳丢失、DataNode无法注册。
核心原因:系统防火墙、SELinux默认开启,拦截Hadoop集群端口通信。
解决方案(生产/测试通用)
bash
# CentOS7/8 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 临时关闭SELinux
setenforce 0
# 永久关闭SELinux(重启生效)
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
二、HDFS核心启动故障(最常见集群问题)
问题3:NameNode格式化后,DataNode启动失败、无法加入集群
故障现象 :NameNode启动正常,DataNode启动瞬间退出,日志报错Invalid cluster ID、集群ID不匹配。
核心原因 :多次执行 hdfs namenode -format 格式化,NameNode生成新集群ID,而DataNode旧数据目录保留旧ID,导致ID不匹配无法注册。
终极解决方案(全节点执行,彻底解决ID冲突)
bash
# 1. 停止所有Hadoop集群进程
stop-dfs.sh
stop-yarn.sh
# 2. 清空所有节点hdfs数据、日志、临时文件(核心操作)
rm -rf $HADOOP_HOME/hdfs/name/*
rm -rf $HADOOP_HOME/hdfs/data/*
rm -rf $HADOOP_HOME/logs/*
rm -rf /tmp/hadoop-*
# 3. 重新格式化NameNode(仅master节点执行)
hdfs namenode -format
# 4. 重启集群
start-dfs.sh
start-yarn.sh
问题4:NameNode无法启动,端口占用/配置报错
故障现象:执行启动命令后,NameNode进程一闪而过,jps查询无进程,日志提示端口冲突、配置文件解析失败。
常见原因
- 9000、9866、9867等HDFS核心端口被占用
- core-site.xml/hdfs-site.xml 配置语法错误、参数写错
- HDFS数据目录权限不足
排查+解决命令
bash
# 1. 检测端口占用(以9866端口为例)
netstat -tulnp | grep 9866
# 2. 杀掉占用端口的进程
kill -9 进程ID
# 3. 修复目录权限(全节点执行)
chmod 755 -R $HADOOP_HOME/hdfs
chown hadoop:hadoop -R $HADOOP_HOME
三、YARN集群启动异常问题
问题5:NodeManager启动失败,YARN无子节点
故障现象:ResourceManager启动正常,jps看不到NodeManager进程,YARN Web页面显示节点数为0。
核心原因
- yarn-site.xml 配置错误,节点主机名未识别
- 本地磁盘空间不足、临时目录损坏
- HDFS未完全启动,依赖服务异常
解决方案
bash
# 1. 清空YARN临时日志缓存(全节点)
rm -rf $HADOOP_HOME/logs/*
rm -rf /tmp/hadoop-*
# 2. 检查并修复yarn配置
# 确保yarn-site.xml包含核心配置:
# yarn.resourcemanager.hostname=master
# yarn.nodemanager.aux-services=mapreduce_shuffle
# 3. 单独启动NodeManager(逐节点排查)
yarn nodemanager
问题6:ResourceManager启动失败、端口冲突
故障现象:YARN启动失败,日志提示8032、8088端口被占用。
解决命令
bash
# 查询8088端口占用
netstat -tulnp | grep 8088
# 强制结束进程
kill -9 $(lsof -i:8088 | grep -v PID | awk '{print $2}')
# 重启YARN
start-yarn.sh
四、配置文件语法与运行报错
问题7:XML配置文件报错,集群启动解析失败
故障现象 :启动报错 Configuration parsing error、标签不闭合、多余字符、空格异常。
核心原因:core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml 存在语法错误,多标签、少闭合标签、中文空格。
避坑方案
- 所有配置文件禁止中文、中文空格
- 所有标签必须成对闭合,无多余换行
- 修改配置后,必须重启集群生效
问题8:HDFS上传文件报错:目录权限拒绝
故障现象 :hdfs dfs -put 上传文件提示权限不足、无法写入。
解决方案
bash
# 1. 授权HDFS根目录读写权限
hdfs dfs -chmod 777 /
hdfs dfs -chown hadoop:hadoop /
# 2. 查看HDFS目录权限
hdfs dfs -ls /
五、集群运行与任务报错
问题9:MapReduce任务运行报错:输出目录已存在
故障现象 :运行WordCount等MR任务,提示 Output directory already exists。
原因:HDFS上上次任务的输出目录未删除,重复运行冲突。
一键解决
bash
# 删除HDFS输出目录(可直接替换自定义路径)
hdfs dfs -rm -r /output
# 重新执行MR任务
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar wordcount /input /output
问题10:集群节点掉线、心跳超时
故障现象:Web页面显示部分DataNode/NodeManager掉线,心跳超时、节点失联。
排查步骤
- 检查节点网络互通:
ping 节点主机名 - 关闭防火墙/SELinux(参考问题2)
- 检查集群时间同步,时间偏差过大导致心跳失效
时间同步解决方案
bash
# 安装时间同步工具
yum install -y ntp
# 同步网络时间
ntpdate ntp.aliyun.com
六、Hadoop集群万能排错流程
遇到未知报错,按以下顺序排查,99%问题可解决:
- 查进程 :
jps查看NameNode、DataNode、ResourceManager、NodeManager是否齐全 - 查日志 :优先看
$HADOOP_HOME/logs下对应进程日志,定位报错关键字 - 查端口:检测核心端口是否被占用
- 查环境:防火墙、SELinux、SSH免密、时间同步
- 重置集群:ID冲突、未知异常直接清空数据目录重新格式化
七、常用集群运维命令(收藏备用)
bash
# 启动/停止集群
start-dfs.sh && start-yarn.sh
stop-dfs.sh && stop-yarn.sh
# 查看集群节点状态
hdfs dfsadmin -report
# 查看HDFS磁盘使用情况
hdfs dfs -du -h /
# 查看YARN节点状态
yarn node -list
# 一键重启集群
stop-dfs.sh && stop-yarn.sh && start-dfs.sh && start-yarn.sh
总结
Hadoop集群部署的绝大多数问题,都不是软件BUG,而是环境配置、权限、端口、集群ID、网络策略五类问题。部署前关闭防火墙SELinux、配置好SSH免密、禁止重复格式化,可规避80%的报错。