hadoop之editlogs和fsimage
一、概述
hadoop的namenode和secondarynamenode:
1. namenode負責
負責客戶端請求的響應
元資料的管理(查詢,修改)
2. 元資料管理
namenode對資料的管理採用了三種儲存形式:
記憶體元資料(NameSystem)
磁碟元資料映象檔案
資料操作日誌檔案(可通過日誌運算出元資料)
3. 元資料儲存機制
A、記憶體中有一份完整的元資料(記憶體meta data)
B、磁碟有一個“準完整”的元資料映象(fsimage)檔案(在namenode的工作目錄中)
C、用於銜接記憶體metadata和持久化元資料映象fsimage之間的操作日誌(edits檔案)注:當客戶端對hdfs中的檔案進行新增或者修改操作,操作記錄首先被記入edits日誌檔案中,當客戶端操作成功後,相應的元資料會更新到記憶體meta.data中
4. 元資料的checkpoint
每隔一段時間,會由secondary namenode將namenode上積累的所有edits和一個最新的fsimage下載到本地,並載入到記憶體進行merge(這個過程稱為checkpoint)
checkpoint過程:
1.如果客戶端涉及到元資料的更新(讀資料不算更新,比如更改檔案的名稱、路徑等、刪除檔案,增刪改操作)。注意客戶端不能更改檔案內容,頂多可以追加操作。會有操作日誌到NameNode的記錄日誌中。
2.隨著元資料的操作記錄日誌增多,secondary NameNode 也會定期的去請求NameNode是否需要checkpoint.
3.如果得到應答,namenode會滾動當前的日誌edits.inprogress,將當前記錄的edits和namenode中的fsimage下載到secondary namenode中。
4.secondary namenode會將其兩者載入到記憶體合併,dump成新的image檔案,重新上傳到namenode中,重新命名為新的fsimage.
5.checkpoint時,會把正在寫的edits滾動一下,然後將fsimage和日誌下載到secondary namenode機器,只有第一次hdfs初始化時才下載fsimage,這時的檔案操作沒有那麼大的資料量。以後只負責下載日誌檔案,合併舊的fsimage
注意:NameNode工作的時候元資料的查詢都是找記憶體,只有NameNode宕機,記憶體中沒有元資料,那hdfs重新啟動的時候。資料就從fsimage和edits這兩個檔案中載入。
namenode和secondary namenode的工作目錄儲存結構完全相同,所以,當namenode故障退出需要重新恢復時,可以從secondary namenode的工作目錄中將fsimage拷貝到namenode的工作目錄,以恢復namenode的元資料。
二、配置
修改兩個檔案:
hdfs-site.xml
<property> <name>dfs.namenode.secondary.http-address</name> <value>10.10.89.219:50070</value> </property> <property> <name>dfs.namenode.checkpoint.dir</name> <value>file:/data/hadoop-2.7.3/checkpoint</value> </property> <property>
core-site.xml
<property> <name>fs.checkpoint.period</name> <value>1800</value> <description>The number of seconds between two periodic checkpoints. </description> </property> <property> <name>fs.checkpoint.size</name> <value>67108864</value> </property>
所有節點都要修改,當然可以指定secondarynamenode的啟動節點為其他節點。