HDFS 常规故障处理

HDFS块丢失

现象/事件

NameNode监控出现Block Missing告警

可能原因

数据节点硬盘故障,或节点故障可能导致数据副本丢失。

HDFS对应文件的副本全部丢失。

影响范围

任务读取文件异常

处理步骤

执行hdfs fsck [异常文件路径],查看异常文件block健康状况,观察副本数是否大于0,找出异常block信息。

根据异常block信息,查看NameNode业务日志,找出该Block的数据分布情况,即分布在哪些数据节点。

登录这些节点查看DN日志,若日志显示该Block已存在,则依次重启DN服务,观察Block是否能正常汇报给NN服务并恢复该Block。

是,操作结束。

否,则执行步骤4。

联系技术支持,与用户确认是否可以删除。

若可以删除,则执行删除操作:hdfs fsck [异常文件路径] -delete。

NameNode服务卡顿

现象描述

NameNode服务卡顿

可能原因

删除大量文件。

频繁调用getContentSummary接口。

其他异常情况。

定位思路

登录监控系统,查看NameNode RPC请求时间及总文件数。

登录Grafana监控系统,查看OP操作的调用时间。

处理步骤

登录监控系统,查看NameNode RPC请求时间是否有延迟,总文件数是否骤降。

是,观察NameNode是否能恢复。

否,执行步骤2。

登录Grafana监控系统,查看OP操作的调用时间,判断哪些接口调用出现延迟。

从NN的审计日志中过滤这类OP操作,确认这些操作的请求来源IP和目录(文件)。

如果可以根据这些目录(文件)直接判断出具体的作业(结合YARN的WebUI),可以直接杀掉相关任务。

如果请求的IP来自Hadoop集群内部,且较为分散,说明大概率是并发作业引起的;如果请求的IP集中在某一个或几个服务器上,说明较大可能是调度集群或者用户客户端作业引起。

使用该IP登录到服务器上,确认有哪些任务启动时间与异常出现的时间匹配;或者逐个关停可疑问题,来观察是否有缓解性能问题。

与业务方沟通最近发生的作业变更,甚至关停特定作业流或者客户端(调度机) 。

对于非NN内部的问题,如DNS服务、LDAP服务、Ranger服务,需要根据其他方式来确认(如根据jstack或者jvisualvm进行故障排查),并及时重启相关服务。

NameNode元数据损坏

现象/事件:

NameNode进程退出并且无法重启恢复

影响范围:

NameNode服务不可用

故障恢复:

1.主NN异常通过主备切换尝试恢复;

如果无法恢复,修复元数据后重启NameNode服务

2. 备NN:修复元数据后重启NameNode服务

NameNode持续出现处理大量元数据变更请求

现象/事件

NN的审计日志中出现大量的元数据变更请求,如create/mkdir/complete/delete/rename/。

影响范围

会导致NN出现频繁对整个目录树加锁,导致客户端或服务端请求变慢,甚至出现明显卡顿。

故障恢复

从审计日志中判断操作用户和IP,进而判断到相应的作业app,找到相关负责人处理。一般是先停掉作业。

JournalNode节点无法启动

现象/事件

JournalNode由于长时间宕机/磁盘满导致服务异常后,无法启动,报错:java.io.IOException: Can’t scan a pre-transactional edit log

影响范围

单个JN节点异常对NN服务无影响,2/3 JN均异常后,NN服务不可用

故障恢复

备份异常节点的JournalNode本地目录,以测试环境为例,备份:/mnt/dfs/2/hadoop/hdfs/journal/bdms-test2/current目录

将正常运行的JN节点上的目录拷贝至异常节点,并按照原目录权限进行授权

重新启动JournalNode

NameNode机器宕机无法恢复

现象/事件:

Active NameNode机器宕机无法恢复

影响范围

NameNode服务主备切换,存在短时间的任务执行卡顿,数据无丢失

故障恢复

宕机机器上的NameNode迁移,并修改所有服务、客户端配置

HDFS核心数据误删

现象/事件:

误操作删除hdfs数仓核心数据

影响范围:

HDFS服务不可用,数据丢失

操作步骤:

1 关停NameNode服务

2 备份NameNode JournalNode元数据

3 清理NameNode、JournalNode元数据路径下edit相关文件

4 清理NameNode删除数据期间生成的fsimage相关文件,保留删除前的simage相关文件

5 恢复Journalnode服务

6 恢复NameNode服务,待NN完成block上报手动退出safemode

7 将坏文件move到临时路径