众所周知,Namenode存放Hadoop集群的元数据,Datanode存放数据。如果Namenode被格式化,那意味着整个集群的数据将全部丢失。除非元数据有备份,可以通过技术手段恢复,否则丢失的数据将不可恢复,这对于生产环境的集群而言,无疑是致命的。本文主要讲述如何禁止Namenode格式化,为你的集群增加一分安全保障。
测试环境:
操作系统版本为CentOS 6.8
CM和CDH版本为5.11.2
文章目录结构:
1. 文档编写目的
2. 禁止Namenode格式化
2.1 从格式化到跑路
2.2 配置高级参数
3. 参数功能验证
4. 总结
即使是普通用户,也能格式化你的Namenode!可能有人认为,只要把操作系统的root用户权限管控好,普通用户不能切换到hdfs用户执行命令,Namenode好像就安全了。其实不然,只要一个命令,普通用户就能为你的Namenode做一下格式化,然后跑路。
普通用户可以通过环境变量切换为hdfs用户,然后执行格式化命令。比如这样:
export HADOOP_USER_NAME=hdfs
hdfs namenode -format
希望各位看完以后,不要随便去别人的集群格式化Namenode,如果做了的话,劝你赶紧跑路,千万别说是我教你格式化的,切记切记。
在HDFS的配置界面,搜索“hdfs-site.xml”,找到Namenode高级配置代码段(安全阀),增加红色框中的内容,把"dfs.namenode.support.allow.format"这个参数的值(默认为true)设为false,表示禁止namenode格式化。然后保存配置,重启HDFS及相关服务。如果你是运维人员,公司的栋梁之才,个人强烈建议配置上该参数,或者买一双好鞋,跑起路来轻松一些。
1、随便选一个Namenode做测试,停止该Namenode
2、格式化该Namenode
3、可以看到,Namenode格式化失败。
4、上图可能还不能直观的说明是由于配置参数导致Namenode格式化失败的,本来我想抓点日志出来的,但是因为那个Namenode被停了,日志也就不打印了。但是我最终还是找到一个图能够很直观的说明禁止Namenode格式化参数的效果。
1、从格式化到跑路,可能只需要简单的几步。不管是无心还是有意,元数据丢失对集群造成的危害很大。禁止Namenode格式化,能够为你的集群增加一分安全保障。
2、对于生产集群,强烈建议禁止Namenode格式化,并且定期备份集群元数据。
一点闲话:
就在今天上午,我在微信群听别人说,他们生产集群突然集体断电,导致hadoop格式化,产生了新的Block Pool,“hdfs dfs -ls /”命令显示没有文件,又没做备份问怎么恢复数据来着。
出现这个问题的原因是,断电后,调用format命令导致Namenode和Datanode的ClusterID不一致,然后导致Datanode启动失败,然后运维把ClusterID同步了。。。估计这运维哥们听着一首《凉凉》,准备跑路了吧。庆幸不是我们公司的客户发生这种事情。