Co2y's Blog

hadoop集群误操作经历

今天因为不了解hadoop,误操作把hdfs上数据全删了,下面是整个经过。

起因

因为之前HADOOP_PID_DIR没有配置,默认在/tmp目录下,然后过一段时间pid文件被系统删了。今天改了配置文件core-site.xml,想重启hadoop集群的时候,报错

1
no datanode to stop

于是我写了个脚本跑到每个节点上去

1
kill $(jps | grep DataNode | awk '{print $1}')

之后终于可以stop-dfs.sh,本以为事情就解决了,没想到发生了后面一连串的故事。

经过

在利用MR做phoenix bulkload的时候,报错hadoop集群处于safe mode下,于是我就直接

1
hadoop dfsadmin -safemode leave

然后再执行MR的时候报错

1
Error: org.apache.hadoop.hdfs.BlockMissingException: Could not obtain block: BP-....

于是执行

1
hadoop fsck /

发现有一些corrupt blocks,这时没注意备份数和具体文件是哪些直接执行了

1
hadoop fsck / -delete

雪崩!! 整个hdfs全被我删了。 这里应该先 -move 移到 /lost+found下, 不能武断的直接delete, 如果备份数大于2还好。 所以正确的做法应该是先

1
hadoop dfsadmin -safemode wait

等待没有反应,再推出安全模式,然后等hdfs自动把备份数增加到2,再move。这样确保数据安全。

后续

因为之前还用了hbase和phoenix,直接把hdfs全删了,导致hbase和zk数据不一致需要先清理掉过期的数据。先stop-hbase.sh,再执行

1
hbase clean --cleanZk

然后重新进入phoenix,生成phoenix的系统表,确保基本组件正常运行。

之后重新生成数据,重新导入。。。