一直工作正常的集群,由于机房电源故障,造成部分datanode硬盘故障,一共有几十个blocks丢失,重新运行集群后,主从namenode都处于standby的状态,以下是处理的主要过程。在开始维护之前,可先运行 hdfs haadmin -getServiceState nn1 或是 hdfs haadmin -getServiceState nn2 ,来用命令行检查当前状态,这里nn1 和 nn2 是指在hdfs-site.xml 中的配置namenode
一、运行zkfc
先确保zookeeper处于正常工作状态,然后在主从namenode上运行 hadoop-daemon.sh start zkfc
二、namenode的safemode模式
safemode是namenode的一种状态,正是由于blocks的丢失,namenode进入safemode状态,此时不能数据进行操作,只能查看元数据,执行 hadoop dfsadmin -safemode leave\
执行后,集群工作正常
三、处理missing blocks故障
报错信息是 “There are ** missing blocks. The following files may be corrupted:”
“Please check the logs or run fsck in order to identify the missing blocks. See the Hadoop FAQ for common causes and potential solutions.”
执行命令 hadoop fsck -delete
成功删除丢失的数据块。