HDFS介紹:
簡述:
Hadoop Distributed File System(HDFS)是一種分布式文件系統,設計用於在商用硬件上運行。它與現有的分布式文件系統有許多相似之處。但是,與其他分布式文件系統的差異很大。HDFS具有高度容錯能力,旨在部署在低成本硬件上。HDFS提供對應用程序數據的高吞吐量訪問,適用於具有大型數據集的應用程序。HDFS放寬了一些POSIX要求,以實現對文件系統數據的流式訪問。HDFS最初是作為Apache Nutch網絡搜索引擎項目的基礎設施而構建的。HDFS是Apache Hadoop Core項目的一部分。
主要成分:
HDFS主要由NameNode和DataNode組成。NameNode負責存儲數據的元數據信息和數據的偏移量。DataNode負責存儲數據。
數據進入先通過NameNode
NameNode在Hadoop1.x存在一個,在Hadoop2.x可以有兩個了。推薦使用2.x,因為2.x相比1.x更能快速切換新的NameNode。
NameNode里面由EditLog和FsImage組成,EdtiLog記錄的是操作日志,FsImage記錄的所有文件的元數據(包括:文件大小,文件名稱,創建時間等等)。另外FsImage還記錄了文件的偏移量,不過這個偏移量是由DataNode做心跳機制反饋給NameNode的。當NameNode啟動或者觸發配置的檢查點時,它會讀取EditLog和FsImage,並使用EditLog應用到FsImage並加載到緩存,然后刷新EditLog。
我畫了個交互圖如下:
下面這則漫畫摘自https://blog.csdn.net/hudiefenmu,他很形象的講解了文件的寫入原理,讀取原理以及處理故障原理。
HDFS寫數據原理:
HDFS讀數據原理:
HDFS故障類型和其檢測方法:
-讀寫故障的處理
-DataNode故障處理
-副本布局策略
Quorum Journal Manager :
簡述:
由於部署了兩個NameNode,並且僅僅允許一台(ActiveNode)對外提供服務,另一台(StandByNode)在NameNode不可用的時候切換過去,這樣就要保證StandBy數據是最新的。 而JournalManager就是接受ActiveNode的變動日志,然后StandBy節點讀取同步更新數據。
結合上面的NameNode我畫了個圖如下:
Zookeeper和ZookeeperFailOverController介紹:
簡述:
Zookeeper簡稱ZK,ZookeeperFailOverController簡稱ZKFC
上面使用JournalManager遇到故障的時候需要手動切換NameNode節點,這樣處理會很不及時,所以必須想個辦法自動切換,這樣就有了Zookeeper,然后配套的出現了ZKFC,ZKFC和NameNode是一一對應的,它是一個守護進程,它負責和ZK通信,並且時刻檢查NameNode的健康狀況。它通過不斷的ping,如果能ping通,則說明節點是健康的。然后ZKFC會和ZK保持一個持久通話,及Session對話,並且ActiveNode在ZK里面記錄了一個"鎖",這樣就會Prevent其它節點成為ActiveNode,當會話丟失時,ZKFC會發通知給ZK,同時刪掉"鎖",這個時候其它NameNode會去爭搶並建立新的“鎖”,這個過程叫ZKFC的選舉。
結合上面簡要圖如下: