HDFS 常见故障与解决方案
1. NameNode 元数据丢失或损坏
- 现象:NameNode 无法启动,报错提示元数据文件缺失或校验失败。
- 原因:误删元数据目录(
dfs.name.dir)或多次格式化导致 namespaceID 不一致。 - 解决:
- 从 SecondaryNameNode 或备份的元数据目录(
namesecondary)中恢复fsimage和edits文件。 - 若元数据完全丢失,需重新格式化集群(注意此操作会清空所有数据)。
- 从 SecondaryNameNode 或备份的元数据目录(
2. DataNode 磁盘故障或宕机
- 现象:HDFS 进入安全模式,数据块副本不足或部分 DataNode 节点离线。
- 原因:磁盘损坏、DataNode 进程崩溃或网络中断。
- 解决:
- 单磁盘故障:更换磁盘后挂载新路径,更新
dfs.datanode.data.dir配置并重启 DataNode。 - DataNode 宕机:检查日志定位问题(如硬盘 I/O 过载),修复后重启 DataNode。
- 副本不足:运行
hdfs fsck /检查损坏块,手动删除或通过hdfs dfsadmin -restoreFailedStorage修复。
- 单磁盘故障:更换磁盘后挂载新路径,更新
3. 安全模式异常触发
- 现象:HDFS 处于只读状态,无法执行写操作。
- 原因:
- 副本不足的 Block 占比超过阈值(默认 0.999)。
- 活跃 DataNode 数量低于
dfs.namenode.safemode.min.datanodes配置值。
- 解决:
- 执行
hdfs dfsadmin -safemode leave强制退出安全模式(需谨慎)。 - 调整副本阈值或修复损坏的 DataNode 以自动退出安全模式。
- 执行
4. 块扫描导致 DataNode 心跳超时
- 现象:DataNode 因心跳超时脱离集群,日志显示长时间持有锁或 I/O 负载高。
- 原因:HDFS 定期全盘扫描块时,小文件过多导致锁竞争和资源争用。
- 解决:
- 升级 Hadoop 至 2.10+ 或 3.x 版本,应用官方补丁(如 HDFS-14476)优化扫描逻辑。
- 合并小文件(使用 HAR 归档)以减少扫描压力。
5. NameNode 内存溢出
- 现象:NameNode 进程崩溃,日志提示内存不足或 GC 超限。
- 原因:处理大量小文件或元数据激增导致堆内存耗尽。
- 解决:
- 调整
hadoop-env.sh中的HADOOP_HEAPSIZE参数,增大 NameNode 堆内存。 - 优化数据存储策略,减少小文件数量或增大 HDFS 块大小(
dfs.blocksize)。
- 调整
6. 客户端写入异常
- 现象:客户端报错
Cannot obtain block length或写入超时。 - 原因:
- 数据块元信息不一致或 DataNode 通信异常。
- NameNode 迁移后客户端配置未更新。
- 解决:
- 检查 DataNode 日志,确认块状态并修复不一致块1。
- 更新客户端的
core-site.xml和hdfs-site.xml,确保连接正确的 NameNode。
关键操作命令
- 检查块完整性:
hdfs fsck / -list-corruptfileblocks # 列出损坏块 - 强制退出安全模式:
hdfs dfsadmin -safemode leave # 需谨慎操作 - 均衡数据分布:
hdfs balancer -threshold 10 # 设置均衡阈值
通过以上措施可解决 HDFS 大部分常见故障,需结合日志分析和集群监控工具(如 Cloudera Manager)快速定位问题。
本文来自博客园,作者:业余砖家,转载请注明原文链接:https://www.cnblogs.com/yeyuzhuanjia/p/18784801

浙公网安备 33010602011771号