1. 程式人生 > >hadoop secondarynamenode的作用

hadoop secondarynamenode的作用

1、初學者會見名思義的認為secondarynamenode是namenode的備份其它的,或者認為它們是一樣的。實質上,它是namenode的一個快照,會根據configuration中設定的值來決定多少時間週期性的去spap一下namenode,記錄namenode中的metadata及其它資料。

2、假使namenode損壞或丟失之後,無法啟動hadoop這時就要人工去幹預恢復到secondarynamenode中所照快照的狀態,這就意味著叢集的資料會或多或少的丟失和一些宕機時間,並且將secondarynamenode作為重要的namenode來處理,這就要求,儘量不要將secondarynamede和namenode放在同一臺機器上。

下篇會說如何使用secondarynamenode去恢復namenode.

英文原版解釋:

                  

NameNode將對檔案系統的改動追加儲存到本地檔案系統上的一個日誌檔案(edits)。當一個NameNode啟動時,它首先從一個映像檔案 (fsimage)中讀取HDFS的狀態,接著應用日誌檔案中的edits操作。然後它將新的HDFS狀態寫入(fsimage)中,並使用一個空的 edits檔案開始正常操作。因為NameNode只有在啟動階段才合併fsimage和edits,所以一段時間後日志文件可能會變得非常龐大,特別是 對大型的叢集。日誌檔案太大的另一個副作用是下一次NameNode啟動會花很長時間。

Secondary NameNode定期合併fsimage和edits日誌,將edits日誌檔案大小控制在一個限度下。因為記憶體需求和NameNode在一個數量級上, 所以通常secondary NameNode(執行在單獨的物理機器上)和NameNode執行在不同的機器上。Secondary NameNode通過bin/start-dfs.sh在conf/masters中指定的節點上啟動。

Secondary NameNode的檢查點程序啟動,是由兩個配置引數控制的:

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

Secondary NameNode儲存最新檢查點的目錄與NameNode的目錄結構相同。 所以NameNode可以在需要的時候讀取Secondary NameNode上的檢查點映象。

如果NameNode上除了最新的檢查點以外,所有的其他的歷史映象和edits檔案都丟失了, NameNode可以引入這個最新的檢查點。以下操作可以實現這個功能:

    * 在配置引數dfs.name.dir指定的位置建立一個空資料夾;
    * 把檢查點目錄的位置賦值給配置引數fs.checkpoint.dir;
    * 啟動NameNode,並加上-importCheckpoint。

NameNode會從fs.checkpoint.dir目錄讀取檢查點, 並把它儲存在dfs.name.dir目錄下。如果dfs.name.dir目錄下有合法的映象檔案,NameNode會啟動失敗。 NameNode會檢查fs.checkpoint.dir目錄下映象檔案的一致性,但是不會去改動它。