1. 首页 > Hadoop教程 > 正文

大数据教程FG094-Hadoop集群故障处理

本文档风哥主要介绍Hadoop集群故障处理,包括故障类型、排查方法、处理流程等内容,风哥教程参考Hadoop官方文档Troubleshooting等内容,适合大数据运维人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。更多视频教程www.fgedu.net.cn

Part01-基础概念与理论知识

1.1 故障处理概述

Hadoop集群故障处理是运维工作的核心内容,需要快速定位问题并恢复服务。学习交流加群风哥微信: itpux-com

故障处理核心要素:

  • 快速响应:及时发现和响应故障
  • 准确定位:快速定位故障原因
  • 有效处理:采取正确的处理措施
  • 总结改进:总结经验防止复发
# Hadoop故障处理简介

故障处理是保障集群稳定运行的关键,
需要建立完善的故障处理机制。

主要目标:
1. 快速恢复
– 最小化故障影响
– 快速恢复服务
– 保障业务连续性

2. 根因分析
– 找出故障原因
– 制定改进措施
– 防止问题复发

3. 经验积累
– 建立知识库
– 提升处理能力
– 优化运维流程

# 故障处理流程

┌─────────────────────────────────────────┐
│ 故障发现 │
│ 监控告警、用户反馈、巡检发现 │
└───────────────────┬─────────────────────┘


┌─────────────────────────────────────────┐
│ 故障确认 │
│ 确认故障现象、影响范围、紧急程度 │
└───────────────────┬─────────────────────┘


┌─────────────────────────────────────────┐
│ 故障定位 │
│ 收集信息、分析日志、定位原因 │
└───────────────────┬─────────────────────┘


┌─────────────────────────────────────────┐
│ 故障处理 │
│ 制定方案、执行处理、验证结果 │
└───────────────────┬─────────────────────┘


┌─────────────────────────────────────────┐
│ 故障总结 │
│ 编写报告、分析原因、改进措施 │
└─────────────────────────────────────────┘

# 故障等级定义

级别 响应时间 处理时间 影响范围
P0 5分钟 30分钟 集群不可用
P1 15分钟 1小时 核心服务异常
P2 30分钟 4小时 部分功能异常
P3 2小时 24小时 非核心问题

# 故障处理原则

1. 先恢复后分析
优先恢复服务,再分析原因

2. 保留现场
收集日志和数据,便于分析

3. 及时沟通
通知相关人员,协同处理

4. 记录完整
详细记录处理过程

5. 总结改进
分析原因,防止复发

1.2 故障类型分类

故障类型分类详解:

# 按组件分类

1. HDFS故障
故障类型 现象 影响
NameNode故障 服务不可用 集群不可用
DataNode故障 数据不可访问 部分数据不可用
块丢失 数据损坏 数据丢失
块损坏 数据校验失败 数据不可用

2. YARN故障
故障类型 现象 影响
ResourceManager故障 调度不可用 作业无法提交
NodeManager故障 节点不可用 计算资源减少
Application失败 作业执行失败 业务中断
资源不足 作业等待 处理延迟

3. 网络故障
故障类型 现象 影响
网络中断 节点不可达 服务异常
DNS故障 解析失败 连接失败
防火墙阻断 端口不通 服务不可用

4. 存储故障
故障类型 现象 影响
磁盘故障 数据不可访问 数据丢失
存储满 写入失败 服务异常
IO瓶颈 性能下降 响应慢

# 按原因分类

1. 硬件故障
– 服务器故障
– 磁盘故障
– 网络设备故障
– 电源故障

2. 软件故障
– 程序Bug
– 配置错误
– 版本兼容问题
– 内存溢出

3. 人为故障
– 误操作
– 配置错误
– 安全违规

4. 环境故障
– 机房断电
– 网络中断
– 温度过高

# 按影响范围分类

类型 影响范围 示例
单节点故障 单个节点 DataNode宕机
多节点故障 多个节点 机架网络故障
集群故障 整个集群 NameNode故障
跨集群故障 多个集群 网络核心故障

1.3 故障处理工具

故障处理工具介绍:

# 日志分析工具

1. 日志查看
命令 用途
tail -f 实时查看日志
grep 过滤日志内容
awk 分析日志字段
less 分页查看日志

示例:
$ tail -f /bigdata/app/hadoop/logs/hadoop-*-namenode-*.log

$ grep “ERROR” /bigdata/app/hadoop/logs/hadoop-*-namenode-*.log | tail -100

2. 日志分析
工具 用途
ELK Stack 集中日志管理
Kibana 日志可视化
自定义脚本 特定分析

# 系统诊断工具

1. 进程管理
命令 用途
jps 查看Java进程
ps 查看进程状态
kill 终止进程
top 查看资源使用

示例:
$ jps
12345 NameNode
12346 DataNode
12347 ResourceManager

$ top -p 12345

2. 网络诊断
命令 用途
ping 测试连通性
telnet 测试端口
netstat 查看网络连接
tcpdump 抓包分析

示例:
$ ping fgedu-node1
$ telnet fgedu-node1 9000
$ netstat -anp | grep 9000

3. 磁盘诊断
命令 用途
df 查看磁盘使用
du 查看目录大小
iostat 查看IO统计
dmesg 查看磁盘错误

示例:
$ df -h
$ du -sh /bigdata/fgdata/*
$ iostat -x 1

# Hadoop诊断工具

1. HDFS工具
命令 用途
hdfs fsck 文件系统检查
hdfs dfsadmin 管理命令
hdfs haadmin HA管理

示例:
$ hdfs fsck /
$ hdfs dfsadmin -report
$ hdfs haadmin -getAllServiceState

2. YARN工具
命令 用途
yarn node 节点管理
yarn application 应用管理
yarn logs 日志查看

示例:
$ yarn node -list
$ yarn application -list
$ yarn logs -applicationId application_123456

# 监控工具

工具 用途
Prometheus 指标采集
Grafana 可视化
AlertManager 告警管理

风哥提示:故障处理需要掌握常用工具和命令。建议建立故障处理知识库,积累常见问题的处理经验。

Part02-生产环境规划与建议

2.1 环境规划建议

环境规划建议:

# 故障处理环境

1. 监控系统
– Prometheus + Grafana
– 实时监控集群状态
– 配置告警规则

2. 日志系统
– ELK Stack
– 集中收集日志
– 支持日志搜索

3. 知识库
– Wiki系统
– 记录故障案例
– 沉淀处理经验

# 故障处理团队

角色 职责
故障响应人 第一时间响应
技术专家 技术分析和处理
协调人 协调资源和沟通
决策人 重大决策

# 故障处理流程

1. 故障发现
– 监控告警
– 用户反馈
– 巡检发现

2. 故障确认
– 确认现象
– 评估影响
– 确定级别

3. 故障处理
– 快速恢复
– 根因分析
– 验证结果

4. 故障总结
– 编写报告
– 分析原因
– 改进措施

2.2 流程规划建议

故障处理流程规划:

# 故障响应流程

1. 接收告警
– 确认告警内容
– 评估故障级别
– 通知相关人员

2. 初步判断
– 查看监控数据
– 检查服务状态
– 确认影响范围

3. 快速处理
– 执行应急预案
– 尝试快速恢复
– 保留现场信息

4. 深入分析
– 收集详细日志
– 分析根本原因
– 制定彻底方案

# 故障升级流程

升级条件:
– 15分钟内无法恢复
– 影响范围扩大
– 需要更多资源

升级路径:
一线运维 -> 二线专家 -> 架构师 -> 管理层

# 故障沟通流程

沟通对象 内容 方式
运维团队 故障详情、处理进展 即时通讯
业务方 影响范围、预计时间 电话/邮件
管理层 重大故障汇报 电话/会议

2.3 预防规划建议

故障预防规划建议:

# 故障预防措施

1. 架构层面
– 高可用设计
– 容灾备份
– 限流降级

2. 运维层面
– 监控告警
– 定期巡检
– 应急演练

3. 管理层面
– 变更管理
– 权限管理
– 培训教育

# 应急预案

预案类型 内容
服务不可用 快速恢复步骤
数据丢失 数据恢复流程
性能问题 优化和扩容方案
安全事件 应急响应流程

# 故障演练

演练类型 频率 内容
桌面演练 每月 方案讨论
模拟演练 每季度 模拟故障处理
实战演练 每年 真实故障模拟

生产环境建议:生产环境建议建立完善的故障处理机制,包括监控告警、应急预案、知识库等。定期进行故障演练,提升团队处理能力。学习交流加群风哥QQ113257174

Part03-生产环境项目实施方案

3.1 HDFS故障处理

# NameNode故障处理

# 1. NameNode无法启动
# 现象: NameNode进程不存在

# 排查步骤
$ jps | grep NameNode

# 查看日志
$ tail -100 /bigdata/app/hadoop/logs/hadoop-root-namenode-*.log

# 常见原因及解决

# 原因1: 未格式化
$ hdfs namenode -format

# 原因2: 端口被占用
$ netstat -anp | grep 9000
$ kill -9

# 原因3: 配置错误
$ cat /bigdata/app/hadoop/etc/hadoop/core-site.xml

# 原因4: 磁盘满
$ df -h /bigdata/fgdata

# 2. NameNode内存溢出
# 现象: NameNode频繁Full GC

# 排查步骤
$ jstat -gcutil $(jps | grep NameNode | awk ‘{print $1}’) 1000 10

# 解决方案
# 增加堆内存
export HADOOP_NAMENODE_OPTS=”-Xmx64g -Xms64g”

# 优化GC参数
export HADOOP_NAMENODE_OPTS=”$HADOOP_NAMENODE_OPTS -XX:+UseG1GC”

# DataNode故障处理

# 1. DataNode无法启动
# 现象: DataNode进程不存在

# 排查步骤
$ jps | grep DataNode

# 查看日志
$ tail -100 /bigdata/app/hadoop/logs/hadoop-root-datanode-*.log

# 常见原因及解决

# 原因1: 无法连接NameNode
$ telnet fgedu-node1 9000

# 原因2: clusterID不匹配
$ cat /bigdata/fgdata/current/VERSION
# 需要重新格式化或修改clusterID

# 原因3: 磁盘满
$ df -h /bigdata/fgdata

# 2. DataNode掉线
# 现象: DataNode被标记为Dead

# 排查步骤
$ hdfs dfsadmin -report | grep -A5 “Dead datanodes”

# 检查DataNode状态
$ ssh fgedu-node3 “jps | grep DataNode”

# 解决方案
# 重启DataNode
$ ssh fgedu-node3 “hdfs –daemon stop datanode”
$ ssh fgedu-node3 “hdfs –daemon start datanode”

# 块故障处理

# 1. 丢失块处理
# 现象: 存在Missing Blocks

# 检查丢失块
$ hdfs fsck / | grep “MISSING”

# 查看丢失块详情
$ hdfs fsck / -list-corruptfileblocks

# 解决方案
# 如果有备份,从备份恢复
# 如果无法恢复,删除损坏文件
$ hdfs fsck /path/to/file -move

# 2. 损坏块处理
# 现象: 存在Corrupt Blocks

# 检查损坏块
$ hdfs fsck / | grep “CORRUPT”

# 修复损坏块
$ hdfs debug recoverLease -path /path/to/file -retries 10

3.2 YARN故障处理

# ResourceManager故障处理

# 1. ResourceManager无法启动
# 现象: RM进程不存在

# 排查步骤
$ jps | grep ResourceManager

# 查看日志
$ tail -100 /bigdata/app/hadoop/logs/yarn-root-resourcemanager-*.log

# 常见原因及解决

# 原因1: ZooKeeper连接失败
$ zkCli.sh -server fgedu-node1:2181

# 原因2: 端口被占用
$ netstat -anp | grep 8032

# 原因3: 配置错误
$ cat /bigdata/app/hadoop/etc/hadoop/yarn-site.xml

# 2. ResourceManager切换失败
# 现象: HA切换异常

# 检查RM状态
$ yarn rmadmin -getServiceState rm1
$ yarn rmadmin -getServiceState rm2

# 手动切换
$ yarn rmadmin -transitionToActive rm1

# NodeManager故障处理

# 1. NodeManager无法启动
# 现象: NM进程不存在

# 排查步骤
$ jps | grep NodeManager

# 查看日志
$ tail -100 /bigdata/app/hadoop/logs/yarn-root-nodemanager-*.log

# 常见原因及解决

# 原因1: 无法连接RM
$ telnet fgedu-node1 8032

# 原因2: 资源配置错误
$ cat /bigdata/app/hadoop/etc/hadoop/yarn-site.xml | grep resource

# 原因3: 磁盘问题
$ df -h

# 2. NodeManager不健康
# 现象: NM状态为UNHEALTHY

# 检查健康状态
$ yarn node -list -all | grep UNHEALTHY

# 查看健康报告
$ yarn node -status fgedu-node3:8041

# 解决方案
# 检查磁盘空间
# 检查健康检查脚本

# Application故障处理

# 1. Application失败
# 现象: 作业执行失败

# 查看应用列表
$ yarn application -list -appStates FAILED

# 查看应用日志
$ yarn logs -applicationId application_1234567890_0001

# 常见原因
– 内存不足
– 资源不足
– 代码错误
– 数据问题

# 解决方案
# 增加内存配置
spark.executor.memory=4g

# 检查数据
hdfs dfs -cat /input/data

# 2. Application卡住
# 现象: 作业长时间运行

# 查看应用状态
$ yarn application -status application_1234567890_0001

# 杀掉应用
$ yarn application -kill application_1234567890_0001

3.3 HA故障处理

# HDFS HA故障处理

# 1. NameNode HA切换失败
# 现象: 无法自动切换

# 检查ZKFC状态
$ jps | grep DFSZKFailoverController

# 检查ZooKeeper
$ zkCli.sh -server fgedu-node1:2181
ls /hadoop-ha/nameservice1

# 检查NameNode状态
$ hdfs haadmin -getAllServiceState

# 手动切换
$ hdfs haadmin -transitionToActive nn1

# 2. 脑裂问题
# 现象: 两个NameNode都是Active

# 检查状态
$ hdfs haadmin -getServiceState nn1
$ hdfs haadmin -getServiceState nn2

# 解决方案
# 强制设置一个为Standby
$ hdfs haadmin -transitionToStandby -forcemanual nn2

# YARN HA故障处理

# 1. ResourceManager HA切换失败
# 现象: 无法自动切换

# 检查RM状态
$ yarn rmadmin -getServiceState rm1
$ yarn rmadmin -getServiceState rm2

# 检查ZooKeeper
$ zkCli.sh -server fgedu-node1:2181
ls /yarn-leader-election

# 手动切换
$ yarn rmadmin -transitionToActive rm1

# 2. ZooKeeper故障
# 现象: ZK集群不可用

# 检查ZK状态
$ zkServer.sh status

# 检查ZK日志
$ tail -100 /bigdata/app/zookeeper/logs/zookeeper-*.out

# 重启ZK
$ zkServer.sh restart

风哥提示:故障处理需要冷静分析,按照流程逐步排查。建议建立故障处理知识库,积累常见问题的处理经验。更多学习教程公众号风哥教程itpux_com

Part04-生产案例与实战讲解

4.1 NameNode故障案例

# 案例: NameNode频繁Full GC导致服务不可用

# 1. 故障现象
– NameNode响应缓慢
– 监控显示频繁Full GC
– 客户端请求超时

# 2. 故障排查
# 检查GC情况
$ jstat -gcutil $(jps | grep NameNode | awk ‘{print $1}’) 1000 10

S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 0.00 100.00 99.50 95.00 90.00 100 5.000 50 50.000 55.000

# 分析: Old区使用率99.5%,频繁Full GC

# 检查堆内存
$ jmap -heap $(jps | grep NameNode | awk ‘{print $1}’)

Heap Configuration:
MaxHeapSize = 8589934592 (8192.0MB)

# 分析: 堆内存8GB,但文件数量过多

# 检查文件数量
$ hdfs fsck / | grep “Total files”
Total files: 500000000 (5亿)

# 3. 根因分析
– 文件数量5亿,超过内存承载能力
– 每个文件对象约占用150字节
– 需要: 5亿 × 150 = 75GB内存
– 当前只有8GB,严重不足

# 4. 解决方案
# 短期: 增加堆内存
export HADOOP_NAMENODE_OPTS=”-Xmx128g -Xms128g”

# 重启NameNode
$ hdfs –daemon stop namenode
$ hdfs –daemon start namenode

# 长期: 优化文件数量
– 合并小文件
– 定期清理过期文件
– 使用HBase存储小文件

# 5. 验证结果
$ jstat -gcutil $(jps | grep NameNode | awk ‘{print $1}’) 1000 10

S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
5.00 15.00 45.00 45.00 85.00 80.00 10 0.500 0 0.000 0.500

# GC恢复正常,服务恢复

4.2 DataNode故障案例

# 案例: DataNode磁盘故障导致数据丢失

# 1. 故障现象
– 监控告警: 存在丢失块
– 部分文件无法访问
– 数据完整性检查失败

# 2. 故障排查
# 检查丢失块
$ hdfs fsck / | grep “MISSING”
MISSING: 10 blocks

# 检查DataNode状态
$ hdfs dfsadmin -report | grep -A5 “Dead datanodes”
Dead datanodes (1):
Name: 192.168.1.103:9866 (fgedu-node3)

# 检查磁盘状态
$ ssh fgedu-node3 “dmesg | grep -i error”
[12345.678901] blk_update_request: I/O error, dev sdb, sector 12345678

# 分析: fgedu-node3磁盘sdb故障

# 3. 根因分析
– DataNode磁盘故障
– 该节点数据无法访问
– 部分块只有2个副本,现在丢失

# 4. 解决方案
# 步骤1: 更换故障磁盘
$ ssh fgedu-node3
# 物理更换磁盘

# 步骤2: 重新配置DataNode
$ cat > /bigdata/app/hadoop/etc/hadoop/hdfs-site.xml << 'EOF' dfs.datanode.data.dir
/bigdata/fgdata/dn1,/bigdata/fgdata/dn2
EOF

# 步骤3: 重启DataNode
$ hdfs –daemon stop datanode
$ hdfs –daemon start datanode

# 步骤4: 触发块复制
$ hdfs debug recoverLease -path / -retries 10

# 5. 验证结果
$ hdfs fsck / | grep “MISSING”
# 无丢失块

$ hdfs dfsadmin -report | grep “Dead datanodes”
Dead datanodes (0):

# 数据恢复完成

4.3 常见问题处理

4.3.1 服务启动失败

# 问题现象:服务无法启动

# 排查步骤
# 1. 检查进程
$ jps

# 2. 检查日志
$ tail -100 /bigdata/app/hadoop/logs/*.log

# 3. 检查端口
$ netstat -anp | grep

# 4. 检查配置
$ cat /bigdata/app/hadoop/etc/hadoop/*.xml

# 常见原因
– 配置错误
– 端口被占用
– 权限问题
– 依赖服务未启动

4.3.2 性能下降

# 问题现象:服务性能下降

# 排查步骤
# 1. 检查系统资源
$ top
$ free -m
$ iostat -x 1

# 2. 检查网络
$ ifconfig
$ netstat -i

# 3. 检查JVM
$ jstat -gc 1000 10

# 4. 检查日志
$ grep -E “slow|timeout|error” /bigdata/app/hadoop/logs/*.log

# 常见原因
– 资源不足
– GC频繁
– 网络问题
– 磁盘IO瓶颈

Part05-风哥经验总结与分享

5.1 故障处理最佳实践

故障处理最佳实践建议:

# 故障处理最佳实践
1. 建立完善的监控告警
2. 制定详细的应急预案
3. 积累故障处理经验
4. 定期进行故障演练
5. 持续优化系统架构

5.2 使用建议

使用建议:

故障处理使用建议:

  • 处理要冷静有序
  • 分析要深入彻底
  • 记录要详细完整
  • 总结要及时有效

5.3 工具推荐

故障处理工具推荐:

  • 监控系统:Prometheus + Grafana
  • 日志系统:ELK Stack
  • 诊断工具:jstat, jmap, jstack
  • 知识库:Wiki系统
风哥提示:故障处理是运维工作的核心能力。建议建立完善的故障处理机制,积累处理经验,不断提升故障处理能力。from bigdata视频:www.itpux.com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息