1 文檔編寫目的
本文主要講述如何通過CM為HDFS啟用Federation。如果你對HDFS的Federation不太了解或者想知道Federation能夠解決什麼問題的話,建議先閱讀我之前寫的這篇文章《HDFS Federation(聯邦)簡介》
測試環境:
作業系統版本為CentOS 6.8
CM和CDH版本為5.11.2
文章目錄結構:
1. 文檔編寫目的
2. 啟用Federation
2.1 配置挂載點
2.2 啟用Federation
2.3 啟用HA
2.4 更新Hive Metastore Namenode
3. 總結
2 啟用Federation
2.1 配置挂載點
1、在指令行執行如下指令,列出HDFS根目錄的子目錄清單
hdfs dfs -ls / |
2、在CM管理界面,點選HDFS->配置->搜尋“mount”,配置挂載點
挂載點對應的是Namenode管理的namespace,為保證每組Namenode的獨立性,每組獨立的Namenode管理的namespace不能交叉,一個挂載點隻能被一個Namenode管理。比如HDFS根目錄下有個叫“/user”的子目錄,“/user”目錄下有a、b、c三個目錄,A組Namenode和B組Namenode都可以選擇不挂載“/user”目錄,但如果要挂載“/user”目錄,那麼A或者B都可選擇完全挂載或者部分挂載“/user”目錄,但是不能出現交叉挂載的情況。比如A完全挂載“/user”目錄,那麼就不允許B再對“/user”及其子目錄進行挂載。如果A部分挂載“/user”目錄,比如挂載了“/user/a”目錄,那麼B可以挂載“/user/b”或者“/user/c”或者“/user/b和/user/c”,但是不能再挂載“/user”或者“/user/a”,否則會造成namespace沖突。
簡而言之,就是啟用Federation必須滿足的條件是:每組Namenode管理的namespace的交集必然為空集,但是namespace的并集不一定等于HDFS的namespace的全集,一定是其的子集。
2.2 啟用Federation
1、點選“Federation與High Availability”按鈕,進入啟用Federation引導界面,該按鈕也是啟用HDFS HA的入口。
2、點選“添加Nameservice”按鈕,添加一個新的Nameservice。
3、為新添加的Nameservice選擇裝入點,實際上就是挂載點。
4、為新添加的Nameservice選擇部署Namenode和SecondaryNamenode角色的主機。
5、配置新添加的Nameservice的資料目錄,預設會從“Namenode Default Group”繼承配置路徑,同時勾選下面兩個附件選項,點選“繼續”按鈕,等待CM啟用Federation,自動重新開機相關服務,部署用戶端即可。
6、啟用Federation成功後,叢集新增了一個Nameservice,NameNode也變為了三個,同時新增了一個SecondaryNamenode,效果如下所示
2.3 啟用HA
1、為新添加的Nameservice啟用HA
2、選擇部署備用Namenode角色所在主機,建議JournalNode另外部署一組,我這裡因為伺服器數量有限,和原始的Namenode共用了一組JournalNode。
3、按照啟用HA引導流程,等待HA啟用完成即可。如果有配置需要修改,可依據實際需要進行配置參數的修改。
4、注意,啟用HA完成後,需要更新Hive Metastore Namenode,因為HDFS預設的Schema變成了ViewFS。如果不更新的話,無法正常通路原叢集的Hive表資料。
5、啟用HA後,效果如下所示
從上面三張圖可以觀察到:
- HDFS擁有兩組Namenode,每組Namenode具備HA,一主一備;Failover Controller有兩組,每組兩個;因為是共用JournalNode,是以隻有3個JN,如果不共用的話,也應該是兩組,每組3個JN。
- HDFS的根目錄下多出了一個/nameservices的子目錄,其下分别對應兩組Namenode的Nameservice名稱,再往下一層目錄,就是對應Namenode管理的Namespace。
2.4 更新Hive Metastore Namenode
啟用Federation前,Hive不包含任何庫表,此步可跳過。
1、停止Hive服務,點選“更新Hive Metastore Namenode”按鈕進行Hive的中繼資料更新,主要是更改Hive表的location資訊,把原始的Schema改為ViewFS。
2、等待更新完成即可。
3 總結
1、啟用Federation必須滿足的條件是:每組Namenode管理的namespace的交集必然為空集,但是namespace的并集不一定等于HDFS的namespace的全集,一定是其的子集。
2、Federation可以為HDFS配置多組互相獨立的Namenode,每組Namenode依據其下配置的挂載點配置設定Namespace。
3、啟用Federation和HA并不沖突,每組Namenode都可以在啟用Federation的同時啟用HA,防止發生Namenode單點故障導緻叢集部分資料目錄不可用的情況。
4、啟用Federation後,HDFS的預設Schema會變更為ViewFS,Hive的中繼資料需要更新。當然,你可以通過更改hdfs的進階配置,将fs.defaultFS的值改回原叢集的Schema。
When your talent can’t support your ambition,