根據Maneesh Varshney的漫畫改編,以簡潔易懂的漫畫形式講解HDFS存儲機制與運行原理,非常適合Hadoop/HDFS初學者理解。
一、角色出演
如上圖所示,HDFS存儲相關角色與功能如下:
Client:客戶端,系統使用者,調用HDFS API操作文件;與NN交互獲取文件元數據;與DN交互進行數據讀寫。
Namenode:元數據節點,是系統唯一的管理者。負責元數據的管理;與client交互進行提供元數據查詢;分配數據存儲節點等。
Datanode:數據存儲節點,負責數據塊的存儲與冗余備份;執行數據塊的讀寫操作等。
二、寫入數據
1、發送寫數據請求
HDFS中的存儲單元是block。文件通常被分成64或128M一塊的數據塊進行存儲。與普通文件系統不同的是,在HDFS中,如果一個文件大小小於一個數據塊的大小,它是不需要占用整個數據塊的存儲空間的。
2、文件切分
3、DN分配
4、數據寫入
5、完成寫入
6、角色定位
三、HDFS讀文件
1、用戶需求
HDFS采用的是“一次寫入多次讀取”的文件訪問模型。一個文件經過創建、寫入和關閉之后就不需要改變。這一假設簡化了數據一致性問題,並且使高吞吐量的數據訪問成為可能。
2、先聯系元數據節點
3、下載數據
前文提到在寫數據過程中,數據存儲已經按照客戶端與DataNode節點之間的距離進行了排序,距客戶端越近的DataNode節點被放在最前面,客戶端會優先從本地讀取該數據塊。
4、思考
四、HDFS容錯機制——第一部分:故障類型及監測方法
1、三類故障
(1)第一類:節點失敗
(2)第二類:網絡故障
(3)第三類:數據損壞(臟數據)
2、故障監測機制
(1)節點失敗監測機制
(2)通信故障監測機制
(3)數據錯誤監測機制

3、回顧:心跳信息與數據塊報告
HDFS存儲理念是以最少的錢買最爛的機器並實現最安全、難度高的分布式文件系統(高容錯性低成本),從上可以看出,HDFS認為機器故障是種常態,所以在設計時充分考慮到單個機器故障,單個磁盤故障,單個文件丟失等情況。
五、容錯第二部分:讀寫容錯
1、寫容錯
2、讀容錯
六、容錯第三部分:數據節點(DN)失效
七、備份規則
1、機架與數據節點
2、副本放置策略
數據塊的第一個副本優先放在寫入數據塊的客戶端所在的節點上,但是如果這個客戶端上的數據節點空間不足或者是當前負載過重,則應該從該數據節點所在的機架中選擇一個合適的數據節點作為本地節點。
如果客戶端上沒有一個數據節點的話,則從整個集群中隨機選擇一個合適的數據節點作為此時這個數據塊的本地節點。
HDFS的存放策略是將一個副本存放在本地機架節點上,另外兩個副本放在不同機架的不同節點上。
這樣集群可在完全失去某一機架的情況下還能存活。同時,這種策略減少了機架間的數據傳輸,提高了寫操作的效率,因為數據塊只存放在兩個不同的機架上,減少了讀取數據時需要的網絡傳輸總帶寬。這樣在一定程度上兼顧了數據安全和網絡傳輸的開銷。
本文轉自京東大數據微信公眾號。