HDFS

一、HDFS:hadoop分布式文件存儲系統(tǒng)。

優(yōu)點:

1. 基于多副本存儲,實現(xiàn)高容錯

2. 適合大數(shù)據(jù)離線批處理,移動計算,不移動數(shù)據(jù),將數(shù)據(jù)位置暴露給計算框架,把計算任務調(diào)度到數(shù)據(jù)儲存的相應節(jié)點上。(結(jié)合yarn mr等再理解)

3. 存儲大量 數(shù)據(jù),GB、TB、PB等,構(gòu)建成本低,安全可靠。

缺點:

1. 不適合小文件存儲。會造成大量空間用于存儲namenode,資源浪費,運行過程中,元數(shù)據(jù)信息會加載到內(nèi)存中,如果文件過大,內(nèi)存會溢出。如果有很多小文件,可以通過離線定時任務將小文件進行合并。

2. 不支持隨機修改,只支持追加。

3. 不能并發(fā)寫入,當有一個線程正在寫入時,其他的線程會被阻塞。

二、HDFS架構(gòu)及核心概念:

采用master/slave架構(gòu)進行存儲,namenode為主節(jié)點,存儲元數(shù)據(jù)(文件切分成哪些block,每個block存儲在哪些dataNode節(jié)點上),dataNode為從節(jié)點,用于存儲數(shù)據(jù)。

NameNode(NN):Active NameNode只有一個,作用是:維護元數(shù)據(jù)信息;處理客戶端讀寫請求;管理block副本策略,默認每個block存儲3個副本,可修改。

hdfs Client 與NameNode發(fā)出讀寫請求,NameNode返回dataNode節(jié)點信息,Client與DataNode交互讀取/寫入數(shù)據(jù)。

edits:編輯日志,客戶端對目錄和文件的寫操作首先被記到 edits日志中,如創(chuàng)建/刪除文件等。

?fsimage:文件系統(tǒng)元數(shù)據(jù)檢查點鏡像,保存了文件系統(tǒng)中 所有的目錄個文件信息,如:一個文件下有哪些子目錄,子文件,文件由哪些塊組成等等。

StandBy NameNode(SNN):NN的熱備節(jié)點,同步Active NN的 edits日志,fsimage等信息,Active 故障時快速切換為新的Active。

DataNode:hdfs中的存儲節(jié)點,有多個,且容易擴展,如果增加的DN設備,利用 balance腳本可重新將數(shù)據(jù)塊分布,使每個節(jié)點磁盤利用率達到均衡。

執(zhí)行Client的請求;通過心跳向NameNode匯報自己的運行狀態(tài)和列表信息;在集群啟動時 DataNode 向 NameNode 提供存儲的 Block塊信息?

Block塊:hdfs存儲最小單元,默認128M,默認副本數(shù)3個,若文件最后一個塊小于128,保持實際大小。

架構(gòu)圖見:hdfs_1、hdfs_2

三、HDFS高可用:

基于zk實現(xiàn)高可用,包括

1 主備namenode元數(shù)據(jù)共享:基于QJM(journalNode 奇數(shù)個)共享存儲系統(tǒng)來存儲edits日志信息; 過程:

(1) client發(fā)出向 主NN節(jié)點 發(fā)出讀寫請求,寫本地edits日志,同時寫入QJM edits文件

(2)加載到本地內(nèi)存,更新目錄樹(定期checkpoint,鏡像文件寫入本地fsimage文件)

(3)備NN節(jié)點同步QJM edit信息,更新自己內(nèi)存中的元數(shù)據(jù)/目錄樹(同樣定期checkpoint,鏡像文件寫入本地fsimage文件)

2 主備Namenode切換

一個NN對應一個 ZKFC進程(主備切換控制器),ZKFS包含兩個組件:HeathMonitor 和 ActiveStandbyElector;

HeathMonitor 通過RPC遠程調(diào)用檢查NN的健康狀況。

ActiveStandbyElector控制主備切換,1. 集群啟動時,主備NN都會向ZK創(chuàng)建一個名稱相同的臨時節(jié)點(鎖節(jié)點),創(chuàng)建成功的為主,失敗的為備,且同時監(jiān)控臨時節(jié)點;2. 運行過程中,如果主節(jié)點異常,與zk會話消失,臨時節(jié)點將被刪除,備NN監(jiān)控到后,會嘗試創(chuàng)建新的臨時節(jié)點,創(chuàng)建成功,則變?yōu)橹鳎?.?HeathMonitor 監(jiān)測到NN異常,通知zkfc,zkfc調(diào)用ActiveStandbyElector 組件進行主備選舉,且異常的不再參加選舉。

為防止雙主(腦裂),主備切換過程中有一個fencing隔離機制,1. 備份NN先 SSH 到 主NN,調(diào)用一個方法將 主 變?yōu)?備;2. kill -9 殺掉進程; 3. 調(diào)用事先準備好的腳本,關機。

詳見?hdfs_HA

四、HDFS內(nèi)部存儲機制:

考慮到可靠性和寫入性能(機架間帶寬較低),會在當前節(jié)點存儲一個副本,在另外一個機架上選兩個節(jié)點,分別放倆副本。

五、HDFS文件寫入流程:

1. 客戶端向nameNode發(fā)出寫入請求

2.nameNode進行一系列檢查,目錄是否已存在,當前用戶是否有權(quán)限等

3.nameNode回復一個允許寫入的應答

4.client將文件切分成多個block塊(大小使用默認配置,或者自身配置?若自身有配置,會覆蓋默認配置)

5.向nameNode請求上傳第一個block塊

6.檢查dataNode的一些信息

7.返回上傳的dataNode列表

8.向dataNode請求建立block傳輸?shù)墓艿?/p>

9.以package方式傳輸文件,例如,若有3個dataNode,先傳入datanode1,由datanode1寫入磁盤同時傳給datanode2,datanode2寫入磁盤同時傳給datanode3,dn3存儲完會發(fā)送一個成功的消息給dn2,dn2寫入成功并受到dn3的消息后,發(fā)送一個成功的消息給dn1,同理由dn1返回成功的消息給client;client完成第一個bolock塊的發(fā)送后,繼續(xù)進行第5步,請求上傳第二個block塊,以此類推。

10.上傳成功后,client向namenode發(fā)送 寫入成功的消息

11.namenode 進行commit,寫入完成。

圖見 hdfs_write

六、HDFS文件讀取流程:

1.client向NameNode發(fā)送讀取請求

2.nameNode檢查目錄樹、權(quán)限等信息,將block塊及對應datanode列表信息返回給client,其中,dn會根據(jù)與客戶端的距離,由近及遠排列。

3.client與最近的datanode連接,獲取數(shù)據(jù)

4.將獲取到的block拼裝成完整的文件

圖見 hdfs_read

七、數(shù)據(jù)校驗:

寫入文件時校驗:寫入前會計算一個校驗和,并跟隨block存儲到dn中,最后一個dn寫入完成時,再計算一個校驗和并與之對比,若不同,拋出異常。

讀取時校驗:從dn讀取block塊后,計算一個校驗和,并與block存儲的校驗和進行對比,若不同,通知NameNode DN上block塊損壞,Namenode通過心跳通知DN刪除損壞的block,并在其他節(jié)點增加一個備份,保持block數(shù)目一致。

八、HDFS常用文件操作與管理

多練習。

九、增加、刪除一個Datenode時應如何操作?

增加dataNode:從其他dataNode節(jié)點拷貝一個hadoop安裝包(含配置文件),然后利用腳本單獨啟動該節(jié)點,然后利用 start-balancer.sh -threshold 平衡各個節(jié)點的存儲。

刪除dataNode:將要刪除的dataNode加入NameNode黑名單列表中(hsfd-site.xml中,設置dfs.hosts.excludes,加入要拉黑的主機名/IP ),然后刷新 hdfs dfsadmin -refreshNodes。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • (一)分布式文件系統(tǒng)概述 數(shù)據(jù)量越來越多,在一個操作系統(tǒng)管轄的范圍存不下了,那么就分配到更多的操作系統(tǒng)管理的磁盤中...
    時待吾閱讀 1,854評論 0 0
  • 參考:初步掌握HDFS的架構(gòu)及原理 1 HDFS 是做什么的 HDFS(Hadoop Distributed Fi...
    小小少年Boy閱讀 417評論 0 2
  • HDFS是Hadoop Distribute File System 的簡稱,也就是Hadoop的一個分布式文件系...
    大佛愛讀書閱讀 974評論 0 0
  • 2018.1.21 周日 晴 今天晚上,我閱覽著我以前寫的日記,就像是回到了那一天,這以后沒事的時候就...
    鑫隆媽媽閱讀 151評論 0 0
  • 這些天總是陰雨綿綿 這雨從西下到東 從回憶下到眼前 你說你喜歡在雨天沉睡 但愿雨水安哄你無夢地睡眠 可說了一遍又一...
    解小馬閱讀 336評論 0 2

友情鏈接更多精彩內(nèi)容