Hadoop 运维与故障排查
目录
1. HDFS 的 NameNode、DataNode、SecondaryNameNode 各自作用
2. HDFS 块损坏(corrupt block)/ 缺失块(missing block)怎么处理
10. OOM 内存溢出,map 和 reduce 任务分别怎么调
12. HBase RegionServer 挂掉,会发生什么
13. HBase 大量 Compaction,影响业务怎么处理
定位:偏向运维、故障排查,不深挖源码;重点覆盖 HDFS、YARN、HBase 三大组件,聚焦故障现象与处理思路。
一、HDFS 部分
1. HDFS 的 NameNode、DataNode、SecondaryNameNode 各自作用
- NameNode:元数据管理者,负责保存文件目录、块位置映射,接收客户端读写请求、管理副本策略。
- DataNode:实际存储数据块(block),执行数据读写操作,定期向 NameNode 上报块报告。
- SecondaryNameNode:并非 NameNode 的备份,主要作用是合并 fsimage 和 edits 日志,生成检查点,辅助元数据备份,不能直接接管主节点。
2. HDFS 块损坏(corrupt block)/ 缺失块(missing block)怎么处理
- 使用
hdfs fsck /命令检查,区分 corrupt(块损坏)和 missing(副本全部丢失)。 - 若存在健康副本:集群会自动复制修复;也可使用
hdfs fsck -move将损坏文件移到/lost+found隔离,等待副本重建。 - 若全部副本丢失:确认业务可舍弃后,使用
hdfs dfs -rm删除文件,并用hdfs fsck -delete清理元数据。 - 排查 DataNode 磁盘硬件、磁盘报错日志,修复底层故障。
注意:
当损坏块是最后一个有效副本时,代表该文件所有副本全部损坏,原始数据已经丢失,HDFS 无法自动修复。人工处理步骤:
- 使用
hdfs fsck -list‑corruptfileblocks定位全部损坏文件; - 检查是否 DataNode 节点离线,尝试重启 DN,等待 DN 重新注册、上报块报告,如果磁盘数据还在,块就恢复正常,不再 CORRUPT,怀疑存在假损坏;
hdfs dfsadmin -report#查看DN存活状态、磁盘失败Volume,只有节点磁盘彻底损坏、块文件物理损坏,才是真的不可恢复 - 如果有快照、distcp 外部备份,优先恢复备份数据;
hdfs dfs -rm /path/corrupt_file#删除损坏文件hadoop distcp hdfs://backup‑nn:8020/path /path#从备份集群拉回数据 - 数据无法恢复时,可以使用
fsck‑move把损坏文件移动到/lost+found隔离;hdfs fsck /path/corrupt_file -move业务确认数据废弃,使用fsck‑delete删除损坏文件消除告警,严禁直接对根目录执行‑deletehdfs fsck /path/corrupt_file -delete# 只删除单个损坏文件(推荐,不要直接 hdfs fsck / -delete 全局执行!)
3. NameNode 宕机如何恢复?
- HA 集群:自动切换 Standby NameNode 成为 Active,业务基本无感知。
- 非 HA 集群:利用 SecondaryNameNode 合并后的 fsimage,恢复元数据,重启 NameNode。
- 恢复完成后执行
hdfs fsck校验块完整性。
4. HDFS 磁盘满了会发生什么?如何处理
现象:当集群大量 DN 的磁盘写满,集群整体可用存储耗尽,读不受影响,写操作受限,副本复制、块平衡、EC 重建任务全部无法执行,副本不足块大量累积(Under‑replicated),当副本的块占比低于阈值,此时 NameNode 会进入安全模式,HDFS 整体不可写。
处理:
方法1:清理临时文件和无用数据,删除过期数据或重复小文件;hdfs dfs -rm -r /tmp/xxx hdfs dfs -expunge # 清空回收站,释放真正磁盘空间;不执行 expunge,删除文件还在回收站,磁盘不会释放!⚠️重点:HDFS 删除文件只是移到回收站 .Trash,不会立刻释放磁盘;必须清空回收站,磁盘空间才会释放
方法2:扩容 DataNode 或增加磁盘;确认空间释放后退出安全模式。
注意:dfs.datanode.du.reserved 预留空间,默认 0;生产一定要配置,例如设置 10GB,磁盘剩余低于这个值,该卷就拒绝写入,防止磁盘彻底打满导致 DN 崩溃
5. 小文件过多对 HDFS 有什么影响?解决方案
影响:每个文件都会占用 NameNode 的元数据内存,小文件过多会加大 NameNode 压力,同时 MapReduce 会为每个小文件启动任务,增加调度开销。
- 业务端合并小文件;
- 使用 CombineFileInputFormat;
- Hive 自动合并;
- 使用 HArchive 归档小文件。
6. safeMode 安全模式什么时候进入?如何退出
进入:NameNode 启动时加载元数据期间会自动进入安全模式;也可通过 hdfs dfsadmin -safemode enter 手动进入。
退出:NameNode 收集到足够 DataNode 块报告、满足最小副本率后自动退出;也可通过 hdfs dfsadmin -safemode leave 手动退出。
二、YARN 资源调度
7. YARN 三大组件 RM、NM、AM 作用
- ResourceManager:全局资源管理器,接收作业,分配资源。
- NodeManager:每个节点代理,管理本机容器,上报资源。
- ApplicationMaster:每个任务自己的 master,向 RM 申请资源,调度本任务的 container。
8. 任务跑失败,一般排查哪些地方
- 查看 YARN 页面 application 日志;
- 查看 container 日志,排查 OOM、代码异常;
- 检查资源分配是否不足(内存、vcore);
- 检查 HDFS 路径是否存在、权限问题;
- 排查磁盘满、节点硬件故障。
9. YARN 任务一直 Pending 不启动,原因?
- 集群资源全部被占满;
- 队列资源限制、容量调度/公平调度配置问题;
- 标签、节点亲和性没有可用节点;
- AM 申请资源过大,没有机器满足;
- NodeManager 掉线。
10. OOM 内存溢出,map 和 reduce 任务分别怎么调
- map 任务:调大
mapreduce.map.memory.mb,同时调整 map 侧 JVM 堆参数; - reduce 任务:调大
mapreduce.reduce.memory.mb,同时调整 reduce 侧 JVM 堆参数; - 同时排查数据倾斜,避免内存集中到个别任务导致 OOM。
11. 什么是数据倾斜,现象、怎么定位、怎么解决
现象:部分 reduce 任务执行极慢,大部分任务已经完成,个别任务卡在 99%。
定位:通过 YARN 查看每个 reduce 处理的数据量,发现某一个 reduce 接收的数据远大于其他任务。
原因:key 分布不均匀,大量相同 key 被打到同一个 reduce。
解决方案:
- 业务侧预处理;
- 加盐,给倾斜 key 增加随机前缀打散;
- 小表 mapjoin,避免 shuffle;
- 调整并行度。
加盐:给热点 key 拼接一个随机数前缀 / 后缀(盐值 salt),把 1 个热点 key 拆成多个不同虚拟 key,打散到多个 task 并行做局部聚合;之后再把盐值去掉,做第二次全局聚合得到最终结果,也叫两阶段聚合
三、HBase
12. HBase RegionServer 挂掉,会发生什么
Zookeeper 检测到 RegionServer 宕机后,HMaster 会将该机器上所有 Region 迁移到其他存活的 RegionServer;迁移期间相关 Region 会短暂不可访问。
13. HBase 大量 Compaction,影响业务怎么处理
Compaction 合并 HFile,会产生大量 IO,导致读写延迟升高。
处理:调整 compaction 策略,限制并发,在业务低峰期执行,调高阈值。
四、集群运维 & 故障综合题
14. DataNode 频繁掉线,可能原因
- DN 进程 GC 时间过长,超过心跳超时,RM/NN 判定死亡;
- 网络卡顿,心跳不通;
- 磁盘 IO 过高,进程卡顿;
- 磁盘故障、磁盘错误;
- 内存配置不合理。
15. 集群读写整体变慢,排查思路
- 查看监控:CPU、磁盘 IO、网络;
- 检查 DataNode 是否掉线、块损坏;
- 检查 YARN 资源是否耗尽;
- 检查是否有大量小文件;
- HBase 查看 compaction 情况;
- 查看系统硬件报错日志。
16. HA 高可用简单说下 HDFS‑HA 原理
两台 NameNode,一台 Active,一台 Standby;
通过 QJournal 共享 edits 编辑日志;ZKFC 做故障检测,Zookeeper 实现主备自动切换。
17. fsimage 和 edits 的区别
- fsimage:NameNode 完整元数据快照。
- edits:增量操作日志,所有增删改操作写入 edits。
- NameNode 启动时加载 fsimage,并回放 edits 得到最新元数据;SecondaryNameNode 负责合并两者生成新的 fsimage。
五、小技巧
- 故障题固定话术:先看现象,看监控,看日志,评估业务影响,优先恢复业务,定位根因,事后优化加告警。
- 运维:重点讲:现象 → 排查命令 → 处理步骤 → 根因。
更多推荐
所有评论(0)