Hadoop中分布式文件系統HDFS的設計思想和功能深入剖析
本節和大家學習一下Hadoop的分布式文件系統HDFS,主要包括HDFS的設計思想,還有HDFS的一些相關功能介紹,希望通過本節的介紹大家對HDFS有一定的認識。
Hadoop的分布式文件系統HDFS的設計思想:
構建一個非常龐大的分布式文件系統。在集群中節點失效是正常的,節點的數量在Hadoop中不是固定的.單一的文件命名空間,保證數據的一致性,寫入一次多次讀取.典型的64MB的數據塊大小,每一個數據塊在多個DN(DataNode)有復制.客戶端通過NN(NameNode)得到數據塊的位置,直接訪問DN獲取數據。
NameNode功能:
Hadoop的分布式文件系統HDFS中的NameNode功能。映射一個文件到一批的塊,映射數據塊到DN節點上。集群配置管理,數據塊的管理和復制。處理事務日志:記錄文件生成,刪除等。因為NameNode的全部的元數據在內存中存儲,所以NN的內存大小決定整個集群的存儲量。NN內存中保存的數據:
文件列表
每一個文件的塊列表
每一個DN中塊的列表
文件屬性:生成時間,復制參數,文件許可(ACL)
File,Derectory,Block在內存中的大小(HadoopJIRA頁面):
File:122+fileName.length
Directory:152+fileName.length
Block:112+24*replication
備注:上面數據和jira中不一樣是因為在0.16以上的版本在INode中添加了一個8字節的數據類型為long的permission數據。
NN的復制線程負責根據文件復制數量選擇DN,磁盤的使用負載平衡,DN復制時的IPC通信負載平衡。
SecondaryNamenode的功能:
SecondaryNamenode是一個讓人混淆的名字,其實SecondaryNamenode是一個輔助NN處理FsImage和事務日志的Server,它從NN拷貝FsImage和事務日志到臨時目錄,合并FsImage和事務日志生成一個新的FsImage,上傳新的FsImage到NN上,NN更新FsImage并清理原來的事務日志。
DataNode功能:
在本地文件系統存儲數據塊,存儲數據塊的元數據,用于CRC校驗。響應客戶端對數據塊和元數據的請求。周期性的向NN報告這個DN存儲的所有數據塊信息。客戶端要存儲數據時從NN獲取存儲數據塊的DN位置列表,客戶端發送數據塊到第一個DN上,第一個DN收到數據通過管道流的方式把數據塊發送到另外的DN上。當數據塊被所有的節點寫入后,客戶端繼續發送下一個數據塊。DN每3秒鐘發送一個心跳到NN,如果NN沒有受到心跳在重新嘗試后宣告這個DN失效。當NN察覺到DN節點失效了,選擇一個新的節點復制丟失的數據塊。我們再來看一下Hadoop的分布式文件系統HDFS中數據塊的問題。
數據塊的放置位置和數據正確性:
在典型的配置里,數據塊一個放在當前的節點,一個放在遠程的機架上的一個節點,一個放在相同機架上的一個節點,多于3個的數據塊隨意選擇放置。客戶端選擇最近的一個節點讀取數據。Hadoop使用CRC32效驗數據的正確性,客戶端每512個byte計算一次效驗,DN負責存儲效驗數據。客戶端從DN獲取數據和效驗數據,如果效驗出錯,客戶端嘗試另外節點上復制的數據。
Tips:
單點的NN,現在Hadoop沒有HA的解決方案。在我的概念中Hadoop加上Zookeeper是一個HA的解決方案。事務日志可以存儲在NM的多個目錄中。比如:一個本地文件系統,一個遠程文件系統(NFS)。Hadoop沒有快照功能,可以考慮使用LVM或ZFS做系統快照。本節關于Hadoop的分布式文件系統HDFS介紹完畢。
【編輯推薦】
- Hadoop簡介:HDFS和MapReduce的實現
- Hadoop 學習總結 :HDFS概念及其用法
- 輕松實現Hadoop Hdfs配置
- Hadoop集群搭建過程中相關環境配置詳解
- Hadoop完全分布模式安裝實現詳解






















