Hadoop學習2-hdfs節點間檔案塊分配原理
hdfs節點間檔案塊分配原理
hdfs
hdfs的全稱是Hadoop Distributed File System,是一個常用的分散式檔案系統。當然也可以選擇其他檔案系統。
hdfs中的檔案儲存方式
在hdfs中,檔案被客戶端分解成若干塊,每一塊都有多份拷貝(拷貝的數量可配置),每一份拷貝在不同的datanode節點上。這就保證瞭如果其中一臺datanode節點宕機,檔案資料也不會丟失。
元資料
從形式上講,元資料可分為記憶體元資料和元資料檔案兩種。其中NameNode在記憶體中維護整個檔案系統的元資料映象,用於HDFS的管理;元資料檔案則用於持久化儲存。
從型別上講,元資料有三類重要資訊:
- 第一類是檔案和目錄自身的屬性資訊,例如檔名、目錄名、父目錄資訊、檔案大小、建立時間、修改時間等。
- 第二類記錄檔案內容儲存相關資訊,例如檔案塊情況、副本個數、每個副本所在的Data Node 資訊等。
- 第三類用來記錄HDFS中所有Data Node資訊,用於Data Node管理。
每一個元資料對應一個檔案,所以說hadoop擅長處理大檔案,而不擅長處理小檔案。因為比如每個小檔案1M,有1024個就是1G,需要1024個元資料。如果把128個小檔案整合成一個大檔案,只需要8個元資料,namenode處理元資料的壓力會減小,而datanode不會應為檔案的增大而增加負擔。
EditsLog檔案和FSImage檔案
hdfs的檔案操作,首先將相應的操作日誌寫到EditsLog中,FSImage相當於某一時刻hdfs中元資料的快照。在某一時間(CheckPoint),FSImage會結合EditsLog,生成最新的元資料metadata,儲存在namenode的磁碟中。
CheckPoint機制
因為要保證資料的一致性,所以EditsLog和FSImage要在某個時間點進行整合,這個時間叫做檢查點(checkpoint)。checkpoint發生在兩個時間:
- 自己配置的週期
- EditsLog檔案寫滿時(可配置大小,預設64M)
EditsLog和FSImage檔案的整合要佔用部分CPU資源,所以在NameNode上整合會使NameNode的主業務受到牽制,所以整合的過程一般發生在另外的伺服器節點——Secondary Namenode
Secondary Namenode的作用
如上圖所示,SecondaryNameNode通過Http的方式從NameNode上下載EditsLog和FSImage,並在NameNode上生成一個Edits.new,作為新的EditsLog。然後SecondaryNameNode在自己節點做整合操作,接著將整合後的FSImage傳給NameNode,並將Edits.new檔案的.new字尾刪除。