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的數據都還是原來的,並沒有置空。