hdfs之namenode學習記錄
1、基本概念
namenode:用於管理datanode和hdfs檔案資訊
namenode有兩個重要檔案fsimage和editslog
namenode容錯機制
1、備份那些組成檔案系統元資料持久態的檔案
2、執行一個輔助namenode,但是不能被用作namenode。作用是定期通過編輯日誌合併名稱空間映象
1.1 fsimage
fsimage:包含檔案系統中的所有目錄和檔案inode的序列化資訊。
fsimage檔案是檔案系統元資料的一個永久檢查點。並非每一個寫操作都更新該檔案,fsimage 檔案巨大,執行寫操作極為耗時,namenode發生故障時,載入fsimage到記憶體,重構新近的元資料(像namenode那樣啟動)
fsimage 並不記錄塊儲存在哪個datanode,卻而代之的是,namenode將對映關係放在記憶體中。當datanode加入叢集時,namenode向datanode索取塊列表以建立塊的對映關係;namenode還將定期徵詢datanode以確保擁有最新的對映。
每個innode是一個檔案或目錄的元資料的內部描述方式。
*對於檔案來說,包含的資訊有“複本級別”,修改時間和訪問時間,訪問許可,塊大小,組成一個檔案的塊等;
對於目錄來說,包含的資訊有修改時間,訪問許可,配額元資料等資訊*
1.2 editslog
記錄操作的日誌檔案。
editslog會記錄大量操作記錄,當namenode重啟時再次載入editlog時需要很多時間。
解決方案是:
執行輔助namenode,為主namenode記憶體中的檔案系統元資料建立檢查點。
建立檢查點的步驟:
1、輔助namenode請求主namenode停止使用edits log 檔案,並重新建立新的一個editslog進行寫入。
2、輔助namenode從主namenode中獲得fsimage和edits log
3、輔助namenode將image檔案載入記憶體,逐一執行editslog檔案中的操作,建立新的fsimage檔案。
4、輔助namenode將新的fsimage檔案傳送回主namenode(使用http post)
5、主namenode接收輔助namenode的fsimage檔案替換掉舊的fsimage檔案;同時1操作中的新edits log替換掉舊的editslog檔案。同時更新fstimes檔案記錄檢查點的執行時間。
結果主namenode中擁有最新的fsimage和更加小的editslog檔案。