NameNode格式化——组件恢复,数据丢失
前情提要
近段时间测试环境被研发整了一个特别离谱的事情,因为HDFS重启没启动起来,直接执行了format操作,大言不惭说的是百度这么说的,过了年以后我上环境看的时候,发现环境直接不能用了,然后启动也启动不起来,项目经理追着维护人员恢复环境,对开发把环境整崩的事情闭口不提,也是离谱。
过程记录
这种情况数据就别指望恢复了,直接怼HDFS进行格式化吧,因为服务器资源就这么些,这个环境还不能重装系统,最保险的方式就是重新格式化HDFS了,否则到时候重装各种组件,旧文件删除不完全啥的,都是坑。
准备工作
停止HDFS进程
停止所有假死的HDFS进程,保证没有进程还存在
删除数据
由于研发格式化过一次,产生了新的集群信息和数据信息,手动删除一下,具体路径可以参考配置文件hdfs-site.xml的dfs.datanode.data.dir
:
删除日志和临时目录
具体的路径可以查看配置文件中的hadoop.tmp.dir
和日志配置项:
启动JournalNode服务
由于启用了HA,所以格式化过程中会去连接JournalNode服务,如果不保证JN服务正常提供服务,初始化会失败:
格式化HDFS
执行NameNode格式化
保证JN服务正常后,再次format,注意!必须使用正确的用户进行,如果之前启动HDFS的用户是hdfs用户,就必须使用hdfs用户进行,否则会出现文件权限问题,需要手动授权:
hdfs namenode -format
格式化完成后,启动NameNode,此时可以访问WebUI检查状态:
恢复Standby NameNode
此时的HDFS还不是HA,切换到hdfs用户,执行bootstrapStandby命令:
启动Standby NameNode
此时可以正常启动Standby的NameNode,并检查WebUI:
恢复依赖服务
接下来依次恢复其他的依赖服务,如HBASE、HIVE等:
小结
环境一定不要让乱搞的研发人员上去操作,百度到的命令不管什么含义都敢直接执行,这种人能带来的灾难绝对不止一点。