目录

一、HDFS 部分

1. HDFS 的 NameNode、DataNode、SecondaryNameNode 各自作用

2. HDFS 块损坏(corrupt block)/ 缺失块(missing block)怎么处理

3. NameNode 宕机如何恢复?

4. HDFS 磁盘满了会发生什么?如何处理

5. 小文件过多对 HDFS 有什么影响?解决方案

6. safeMode 安全模式什么时候进入?如何退出

二、YARN 资源调度

7. YARN 三大组件 RM、NM、AM 作用

8. 任务跑失败,一般排查哪些地方

9. YARN 任务一直 Pending 不启动,原因?

10. OOM 内存溢出,map 和 reduce 任务分别怎么调

11. 什么是数据倾斜,现象、怎么定位、怎么解决

三、HBase

12. HBase RegionServer 挂掉,会发生什么

13. HBase 大量 Compaction,影响业务怎么处理

四、集群运维 & 故障综合题

14. DataNode 频繁掉线,可能原因

15. 集群读写整体变慢,排查思路

16. HA 高可用简单说下 HDFS‑HA 原理

17. fsimage 和 edits 的区别

五、小技巧


定位:偏向运维、故障排查,不深挖源码;重点覆盖 HDFS、YARN、HBase 三大组件,聚焦故障现象与处理思路。

一、HDFS 部分

1. HDFS 的 NameNode、DataNode、SecondaryNameNode 各自作用
  • NameNode:元数据管理者,负责保存文件目录、块位置映射,接收客户端读写请求、管理副本策略。
  • DataNode:实际存储数据块(block),执行数据读写操作,定期向 NameNode 上报块报告。
  • SecondaryNameNode:并非 NameNode 的备份,主要作用是合并 fsimage 和 edits 日志,生成检查点,辅助元数据备份,不能直接接管主节点。
2. HDFS 块损坏(corrupt block)/ 缺失块(missing block)怎么处理
  1. 使用 hdfs fsck / 命令检查,区分 corrupt(块损坏)和 missing(副本全部丢失)。
  2. 若存在健康副本:集群会自动复制修复;也可使用 hdfs fsck -move 将损坏文件移到 /lost+found 隔离,等待副本重建。
  3. 若全部副本丢失:确认业务可舍弃后,使用 hdfs dfs -rm 删除文件,并用 hdfs fsck -delete 清理元数据。
  4. 排查 DataNode 磁盘硬件、磁盘报错日志,修复底层故障。

注意:

当损坏块是最后一个有效副本时,代表该文件所有副本全部损坏,原始数据已经丢失,HDFS 无法自动修复。人工处理步骤:

  1. 使用 hdfs fsck -list‑corruptfileblocks 定位全部损坏文件;
  2. 检查是否 DataNode 节点离线,尝试重启 DN,等待 DN 重新注册、上报块报告,如果磁盘数据还在,块就恢复正常,不再 CORRUPT,怀疑存在假损坏;hdfs dfsadmin -report #查看DN存活状态、磁盘失败Volume,只有节点磁盘彻底损坏、块文件物理损坏,才是真的不可恢复
  3. 如果有快照、distcp 外部备份,优先恢复备份数据;hdfs dfs -rm /path/corrupt_file #删除损坏文件 hadoop distcp hdfs://backup‑nn:8020/path /path #从备份集群拉回数据
  4. 数据无法恢复时,可以使用 fsck‑move 把损坏文件移动到 /lost+found 隔离;hdfs fsck /path/corrupt_file -move 业务确认数据废弃,使用 fsck‑delete 删除损坏文件消除告警,严禁直接对根目录执行‑delete hdfs fsck /path/corrupt_file -delete # 只删除单个损坏文件(推荐,不要直接 hdfs fsck / -delete 全局执行!)
3. NameNode 宕机如何恢复?
  1. HA 集群:自动切换 Standby NameNode 成为 Active,业务基本无感知。
  2. 非 HA 集群:利用 SecondaryNameNode 合并后的 fsimage,恢复元数据,重启 NameNode。
  3. 恢复完成后执行 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 会为每个小文件启动任务,增加调度开销。

  1. 业务端合并小文件;
  2. 使用 CombineFileInputFormat;
  3. Hive 自动合并;
  4. 使用 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. 任务跑失败,一般排查哪些地方
  1. 查看 YARN 页面 application 日志;
  2. 查看 container 日志,排查 OOM、代码异常;
  3. 检查资源分配是否不足(内存、vcore);
  4. 检查 HDFS 路径是否存在、权限问题;
  5. 排查磁盘满、节点硬件故障。
9. YARN 任务一直 Pending 不启动,原因?
  1. 集群资源全部被占满;
  2. 队列资源限制、容量调度/公平调度配置问题;
  3. 标签、节点亲和性没有可用节点;
  4. AM 申请资源过大,没有机器满足;
  5. 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。

解决方案:

  1. 业务侧预处理;
  2. 加盐,给倾斜 key 增加随机前缀打散;
  3. 小表 mapjoin,避免 shuffle;
  4. 调整并行度。

  加盐:给热点 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 频繁掉线,可能原因
  1. DN 进程 GC 时间过长,超过心跳超时,RM/NN 判定死亡;
  2. 网络卡顿,心跳不通;
  3. 磁盘 IO 过高,进程卡顿;
  4. 磁盘故障、磁盘错误;
  5. 内存配置不合理。
15. 集群读写整体变慢,排查思路
  1. 查看监控:CPU、磁盘 IO、网络;
  2. 检查 DataNode 是否掉线、块损坏;
  3. 检查 YARN 资源是否耗尽;
  4. 检查是否有大量小文件;
  5. HBase 查看 compaction 情况;
  6. 查看系统硬件报错日志。
16. HA 高可用简单说下 HDFS‑HA 原理

两台 NameNode,一台 Active,一台 Standby;
通过 QJournal 共享 edits 编辑日志;ZKFC 做故障检测,Zookeeper 实现主备自动切换。

17. fsimage 和 edits 的区别
  • fsimage:NameNode 完整元数据快照。
  • edits:增量操作日志,所有增删改操作写入 edits。
  • NameNode 启动时加载 fsimage,并回放 edits 得到最新元数据;SecondaryNameNode 负责合并两者生成新的 fsimage。

五、小技巧

  1. 故障题固定话术:先看现象,看监控,看日志,评估业务影响,优先恢复业务,定位根因,事后优化加告警。
  2. 运维:重点讲:现象 → 排查命令 → 处理步骤 → 根因。

更多推荐