1 情况概述
公司的开发集群在周末莫名其妙的主节点Hadoop-1的启动固态盘挂了,由于CM、HDFS的NameNode、HBase的Master都安装在Hadoop-1,导致了整个集群都无法使用,好在数据不在启动盘。
Hadoop-1的系统必须重装,但是不能重装集群,因为要将之前的数据全部保留恢复,所以只能通过集群恢复的手段将集群重新跑起来。
主要服务角色安装情况:
Hadoop-1:
CM,HDFS( NN,DN ),HBase(HMaster, RegionServer),YARN(NM),Zookeeper
Hadoop-2:
HDFS( SNN,DN ),HBase(HMaster, RegionServer),YARN(RM,NM),Zookeeper
Hadoop-3,Hadoop-4:
HDFS( DN ),HBase(RegionServer),YARN(NM),Zookeeper
说明:在写本文档的时候,出现此问题的研发集群已经恢复完成,但是很遗憾没有留下证据,所以这里利用了一个临时的集群重现该问题,并执行恢复
2 面临的问题
- Hadoop-1系统重装后CM必须得重装,那么怎么将其余好的节点重新加入到新的CM。
- 新建的NameNode怎么重新使用原来的NameNode的数据,怎么重新管理其余结点的DataNode。
3 恢复记录
3.1 重装系统
最小化安装CentOS 64位系统,
准备好基础环境,恢复到和原来的Hadoop-1一样。
注意要点:
- 重新配置Hosts
- 重新配置ssh的无密钥登录。
- 重新配置时钟服务
- 重新配置CentOS,及CM、CDH的网络镜像源
- 挂载数据盘到原来的位置
3.2 重装CM
在Hadoop-1中利用CM的引导文件cloudera-manager-installer.bin重装CM服务,剩下的就是界面操作。前面的步骤和搭建新集群一样,以下为截图:
1.
在到这个界面之前的步骤和安装全新集群基本一样的,因此之前的步骤参照集群搭建文档即可,重点就是这个图,这个地方是选择服务角色的安装主机,一定要和之前的集群保持一致
上面这张图是更改后的,根据原来的集群,NameNode在test-hadoop-1上,而SNN在test-hadoop-2上面,每个节点都存在DataNode,至于HBase的配置还是理论上说可以随意(因为它的数据是在HDFS和Zookeeper上只要它俩对了,HBase的数据自然就恢复了。),但是还是建议和原来的保持一致。
Zookeeper要保持和原来一致。
Yarn主要用于计算,其实也可以是随意的,但是它有NM,所以还是建议保持和原来一致
CM,Spark可以配置是可以随意的,因为这两个东西跟我们的数据没太大关系。
接着往下走,
要是安装了要是原来的集群的自定义数据库不再主节点上,则直接在这里指过去使用原来的数据库,否则直接联本地的。
接着往下走,
这一步是重中之重,一定要注意将数据目录指定到原来的集群的数据目录,保持高度一致,对应修改完就可以启动了。
启动后HDFS报错,因为NameNode会去尝试format,但是已经有数据了,所以format失败,那么基本上意味着我们数据恢复成功80%了,我们进入CM的控制界面,重启所服务,要是不出意外,集群修复就完成了。
4 可能的错误
4.1 Zookeeper
若启动时报zookeeper启动异常,
完整日志如下:
这个错是个很奇怪的错,只发生在新建的主节点上,是因为挂载原来的数据盘时,原来的目录及文件的用户及用户组发生了变化,如下:
新建的主节点test-hadoop-1:
原来的数据结点test-hadoop-2:
可以看到在新建的主节点test-hadoop-1中zookeeper的用户和用户组都成了solr,我们只需要将其修改过来就好了。
再次启动zookeeper若报如下错误:
则在对应的节点重启CM的agent
再次启动zookeeper:
其他的权限错误,就不再说了,对照着改就好了。
5 总结
通过这次集群恢复,有以下几点收获,
- CM搭建的Hadoop集群中服务和数据是分离的,就算是搭建一个全新的集群,只要将数据目录指定到原来的目录,就可以使用原来的数据。(按理说所有Hadoop集群都是这样。)
- 要大胆尝试。因为之前想到集群的主节点都挂了,无法避免重新搭建,数据只能全清空,迫于数据的重要性,在测试集群试验了把新搭集群但是数据目录还是原来的,发现hdfs,hbase,kafka,zookeeper的数据都还是原来的,并没有置空。