Hadoop中Namenode單點故障的解決方案

菜鳥級的IT之路發表於2018-04-15

HadoopNamenode單點故障的解決方案

需求:

實現namenode後設資料的備份,解決namenode單點當機導致叢集不可用的問題。

方案描述:

namenode所在伺服器當機的時候,我們可以利用namenode備份的後設資料迅速重構新的namenode來投入使用。

1.  Hadoop本身提供了可利用secondarynamenode的備份資料來恢復namenode的後設資料的方案,但因為checkpoint(在每次 checkpoint的時候secondarynamenode才會合併並同步namenode的資料)的問題,secondarynamenode的備份資料並不能時刻保持與namenode同步,也就是說在namenode當機的時候secondarynamenode可能會丟失一段時間的資料,這段 時間取決於checkpoint的週期。我們可以減小checkpoint的週期來減少資料的丟失量,但由於每次checkpoint很耗效能,而且這種方案也不能從根本上解決資料丟失的問題。所以如果需求上不允許這種資料的丟失,這種方案可直接不予考慮。

2.  Hadoop提供的另一種方案就是NFS,一種即時備份namenode後設資料的方案,設定多個data目錄(包括NFS目錄),讓namenode在持 久化後設資料的時候同時寫入多個目錄,這種方案較第一種方案的優勢是能避免資料的丟失(這裡我們暫時不討論NFS本身會丟失資料的可能性,畢竟這種機率很小 很小)。既然可以解決資料丟失的問題,說明這套方案在原理上是可行的

參考下面一樣:

Hadoop叢集中,NameNode節點儲存著HDFS上所有檔案和目錄的後設資料資訊

如果NameNode掛了,也就意味著整個Hadoop叢集也就完了

所以,NameNode節點的備份很重要,可以從以下2個方面來備份NameNode節點

1. hdfs-site.xml中,配置多個namedir到不同的磁碟分割槽上:

<property>
    <name>dfs.name.dir</name>
    <value>/pvdata/hadoopdata/name/,/opt/hadoopdata/name/</value>
</property>

2. 在另外的一臺伺服器上配置Secondary NameNode:它是NameNode的一個備份

Secondary NameNode會定期合併fsimageedits日誌,將edits日誌檔案大小控制在一個限度下

合併的時機是由2個配置引數決定的:

fs.checkpoint.period,指定連續兩次檢查點的最大時間間隔, 預設值是1小時。
fs.checkpoint.size定義了edits日誌檔案的最大值,一旦超過這個值會導致強制執行檢查點(即使沒到檢查點的最大時間間隔)。預設值是64MB

Secondary NameNode的配置過程如下:

在conf/masters中指定第二名稱節點的主機名

在core-site.xml中指定checkpoint的目錄

<property>
  <name>fs.checkpoint.dir</name>
  <value>/opt/hadoopdata/secondname,/pvdata/hadoopdata/secondname</value>
  <description>Determines where on the local filesystem the DFS secondary
      name node should store the temporary images to merge.
      If this is a comma-delimited list of directories then the image is
      replicated in all of the directories for redundancy.
  </description>
</property>

如果NameNode節點掛了,可以按照如下步驟來從Secondary NameNode來恢復:

在dfs.name.dir指定的位置建立一個空資料夾

從Secondary NameNode上把secondname的目錄給scp到新的NameNode機器的fs.checkpoint.dir下

使用hadoop/bin/hadoop namenode -importCheckpoint來啟動NameNode,主要不要執行format命令

使用hadoop fsck /user命令檢查檔案Block的完整性。

相關文章