天天看點

如何通過CM為HDFS啟用Federation

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”,配置挂載點

如何通過CM為HDFS啟用Federation

挂載點對應的是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的入口。

如何通過CM為HDFS啟用Federation

2、點選“添加Nameservice”按鈕,添加一個新的Nameservice。

如何通過CM為HDFS啟用Federation

3、為新添加的Nameservice選擇裝入點,實際上就是挂載點。

如何通過CM為HDFS啟用Federation

4、為新添加的Nameservice選擇部署Namenode和SecondaryNamenode角色的主機。

如何通過CM為HDFS啟用Federation

5、配置新添加的Nameservice的資料目錄,預設會從“Namenode Default Group”繼承配置路徑,同時勾選下面兩個附件選項,點選“繼續”按鈕,等待CM啟用Federation,自動重新開機相關服務,部署用戶端即可。

如何通過CM為HDFS啟用Federation

6、啟用Federation成功後,叢集新增了一個Nameservice,NameNode也變為了三個,同時新增了一個SecondaryNamenode,效果如下所示

如何通過CM為HDFS啟用Federation

2.3  啟用HA

1、為新添加的Nameservice啟用HA

如何通過CM為HDFS啟用Federation

2、選擇部署備用Namenode角色所在主機,建議JournalNode另外部署一組,我這裡因為伺服器數量有限,和原始的Namenode共用了一組JournalNode。

如何通過CM為HDFS啟用Federation

3、按照啟用HA引導流程,等待HA啟用完成即可。如果有配置需要修改,可依據實際需要進行配置參數的修改。

如何通過CM為HDFS啟用Federation
如何通過CM為HDFS啟用Federation

4、注意,啟用HA完成後,需要更新Hive Metastore Namenode,因為HDFS預設的Schema變成了ViewFS。如果不更新的話,無法正常通路原叢集的Hive表資料。

如何通過CM為HDFS啟用Federation

5、啟用HA後,效果如下所示

如何通過CM為HDFS啟用Federation
如何通過CM為HDFS啟用Federation
如何通過CM為HDFS啟用Federation

從上面三張圖可以觀察到:

  • 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。

如何通過CM為HDFS啟用Federation

2、等待更新完成即可。

如何通過CM為HDFS啟用Federation

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。

如何通過CM為HDFS啟用Federation

When your talent can’t support your ambition,

繼續閱讀