一、namenode啟動時如何維護元資料:
1、概念介紹:
edits檔案:
編輯日誌的作用
編輯日誌是記錄對檔案或者目錄的修改資訊,比如刪除目錄,修改檔案等資訊。編輯日誌一般命名規則是「edits_*」,它在namenode啟動後,記錄對檔案系統的改動序列。
edits檔案存放的是hadoop檔案系統的所有更新操作的路徑,檔案系統客戶端執行的所有寫操作首先會被記錄到edits檔案中。
fsimage映像檔案:
映象檔案的作用
通過檢視上面的xml檔案,可以知道映象檔案實際是存放的目錄結構、檔案屬性等相關資訊。另外也可以看到md5校驗檔案,這個檔案主要是用來判斷映象檔案是否發生修改。fsimage檔案是namenode中關於元資料的映象,一般稱為檢查點,它是在namenode啟動時對整個檔案系統的快照。
fsimage檔案是hadoop檔案系統元資料的乙個永久性的檢查點,其中包含hadoop檔案系統中的所有目錄和檔案idnode的序列化資訊。
-rw-rw-r-- 1 czz czz 42 2月 3 10:41 edits_*
-rw-rw-r-- 1 czz czz 1.0m 2月 3 10:41 edits_inprogress_0000000000000021485
-rw-rw-r-- 1 czz czz 21k 2月 3 10:41 fsimage_0000000000000021484
-rw-rw-r-- 1 czz czz 62 2月 3 10:41 fsimage_0000000000000021484.md5
-rw-rw-r-- 1 czz czz 6 2月 3 10:41 seen_txid
-rw-rw-r--. 1 czz czz 202 2月 2 13:34 version
每個以md5命名結尾的檔案是對其字首的校驗,也就是說在看到的兩個檔案(fsimage_*)中,實際儲存資料的是非md5結尾的檔案。
總結:
fsimage和edits檔案都是經過序列化的,在namenode啟動的時候,它會將fsimage檔案中的所有內容載入到記憶體中,之後再執行edits檔案中的各項操作。使得記憶體中的元資料和實際的資料同步,存在記憶體中的元資料支援客戶端的讀操作。
在namenode啟動之後,hdfs中的更新操作會重新寫到edits檔案中,因為fsimage檔案一般情況下都是非常大的,可以達到gb級別甚至更高,如果所有的更新操作都向fsimage中新增的話,勢必會導致系統執行的越來越慢。但是如果向edits檔案中寫的話就不會導致這樣的情況出現,每次執行寫操作後,且在向客戶端傳送成功**之前,edits檔案都需要同步更新的。 如果乙個檔案比較大,會使得寫操作需要向多台機器進行操作,只有當所有的寫操作都執行完成之後,寫操作才可以稱之為成功。這樣的優勢就是在任何的操作下都不會因為機器的故障而導致元資料不同步的情況出現。 **fsimage包含hadoop檔案系統中的所有的目錄和檔案idnode的序列化資訊。**對於檔案來說,包含的資訊有修改時間、訪問時間、塊大小和組成乙個檔案塊資訊等;對於目錄來說,包含的資訊主要有修改時間、訪問控制權等資訊。fsimage並不包含datanode的資訊,而是包含datanode上塊的對映資訊,並存在記憶體中。當乙個新的datanode加入集群時,datanode都會向namenode提供塊的資訊,並且namenode也會定期的獲取塊的資訊,以便namenode擁有最新的塊對映資訊。又因為fsimage包含hadoop檔案系統中的所有目錄和檔案idnode的序列化資訊,所有一旦fsimage出現丟失或者損壞的情況,那麼即使datanode上有塊的資料,但是我們沒有檔案到塊的對映關係,所以我們也是沒有辦法使用datanode上的資料。所以定期且及時的備份fsimage和edits檔案非常重要.
2、流程介紹:
①、載入fsimage映像檔案到記憶體
②、載入edits檔案到記憶體
③、在記憶體將fsimage映像檔案和edits檔案進行合併
④、將合併後的檔案寫入到fsimage中
⑤、清空原先edits中的資料,使用乙個空的edits檔案進行正常操作
3、流程圖分析:
4、疑問
因為namenode只有在啟動的階段才合併fsimage和edits,那麼如果執行時間長了,edits檔案可能會越來越大,在下一次啟動namenode時會花很長的時間,請問能否讓fsimage映像檔案和edits日誌檔案定期合併呢?
答案肯定是可以的,為了解決這個問題我們就要用到secondary namenode了,secondary namenode主要的作用是什麼呢?他是如何將fsimage和edits進行合併的呢?帶著疑問再次進行分析。
二、secondary namenode工作流程:
1、secondary namenode和namenode的區別:
namenode:
①、儲存檔案的metadata,執行時所有資料都儲存在記憶體中,這個的hdfs可儲存的檔案受限於namenode的記憶體。
②、namenode失效則整個hdfs都失效了,所以要保證namenode的可用性。
secondary namenode:
①、定時與namenode進行同步,定期的將fsimage映像檔案和edits日誌檔案進行合併,並將合併後的傳入給namenode,替換其映象,並清空編輯日誌。如果namenode失效,需要手動的將其設定成主機。
②、secondary namenode儲存最新檢查點的目錄和namenode的目錄結構相同。所以namenode可以在需要的時候應用secondary namenode上的檢查點映象。
2、什麼時候checkpoint
①、連續兩次的檢查點最大時間間隔,預設是3600秒,可以通過配置「fs.checkpoint.period」進行修改
②、edits日誌檔案的最大值,如果超過這個值就會進行合併即使不到1小時也會進行合併。可以通過「fs.checkpoint.size」來配置,預設是64m;
3、secondary namenode的工作流程
①、namenode通知secondary namenode進行checkpoint。
②、secondary namenode通知namenode切換edits日誌檔案,使用乙個空的。
③、secondary namenode通過http獲取nmaenode上的fsimage映像檔案(只在第一次的時候)和切換前的edits日誌檔案。
④、secondary namenode在內容中合併fsimage和edits檔案。
⑤、secondary namenode將合併之後的fsimage檔案傳送給namenode。
⑥、namenode用secondary namenode 傳來的fsimage檔案替換原先的fsimage檔案,並且更新fsimage檔案的檢查點時間。
4、流程圖分析:
NameNode元資料管理機制
1.使用者上傳檔案的的過程 解析 使用者向nn申請上傳檔案 nn將分配的dn資訊記錄追加在edit.log的檔案中 nn將分配的dn資訊返回給客戶端 客戶端將檔案上傳到各個節點上 客戶端將上傳成功的資訊返回給nn節點,nn將edit.log檔案中的內容寫入記憶體中,一次上傳檔案的操作完成了 當edi...
HDFS之namenode管理元資料機制及一些問題
namenode對資料的管理採用了三種儲存形式 記憶體元資料 namesystem 磁碟元資料映象檔案 資料操作日誌檔案 可通過日誌運算出元資料 元素據儲存機制 1 記憶體中有乙份完整的元資料 記憶體meta data 2 磁碟有乙個 準完整 的元資料映象 fsimage 檔案 在namenode的...
HDFS及NameNode元資料管理機制細節
namenode是 整個檔案系統的管理節點。它維護著整個檔案系統的檔案目錄樹,檔案 目錄的元資訊和每個檔案對應的資料塊列表。接收使用者的操作請求。檔案包括 fsimage 元資料映象檔案。儲存某一時段namenode記憶體元資料資訊。edits 操作日誌檔案。fstime 儲存最近一次checkpo...