1. 程式人生 > >hadoop之editlogs和fsimage

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的啟動節點為其他節點。