HDFS(四):HDFS 讀寫流程

HDFS的寫數(shù)據(jù)流程


4.0 hafd寫入流程.jpg

1)客戶端通過DistributedFileSystem模塊想NameNode請求上傳文件,NameNode檢查目標文件是否存在,父目錄是否存在。
2)NameNode返回是否可以上傳
3)客戶端請求第一個Block上傳到那幾個DataNode服務器上
4)NameNode返回3哥DataNode節(jié)點,分別為dn1、dn2、dn3
5)客戶端通過FSDataOutputStream模塊請求dn1上傳數(shù)據(jù),dn1收到請求會繼續(xù)吊用dn2,然后dn2調(diào)用dn3,將這個通信管道建立完成
6)dn1、dn2、dn3逐級應答客戶端
7)客戶端開始往dn1上傳第一個Block(先從磁盤讀取數(shù)據(jù)放到一個本地內(nèi)存緩存),以Packet為單位,dn1收到一個Packet就會傳給dn2,dn2傳給dn3;dn1每傳一個package都會放入一個應答隊列等待應答。
8)當一個Block傳輸完成之后,客戶端再次請求NameNode上傳第二個Block的服務器(重復執(zhí)行3~7步)。

網(wǎng)絡拓撲-節(jié)點距離計算

在HDFS寫數(shù)據(jù)過程中,NameNode會選擇距離上傳數(shù)據(jù)最近距離的DataNode接收數(shù)據(jù)。
節(jié)點距離:兩個節(jié)點到達最近的公共祖先的距離總和。


4.1 節(jié)點距離計算.jpg

機架感知-副本存儲節(jié)點選擇

第一個副本在Client所處的節(jié)點上,如果客戶在集群外,隨機選一個。
第一個副本保證速度:
第二個副本在另一個機架的隨機一個節(jié)點。
第二個副本保證可靠性:
第三個副本在第二個副本所在機架的隨機節(jié)點。
第三個副本保證可靠性同時考慮速度。
Crtl + n 查找BlockPlacementPolicyDefault,在該類中查找chooseTargetInOrder方法。該類在hadoop-hafs對應jar包。

    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-hdfs</artifactId>
      <version>3.1.3</version>
    </dependency>

HDFS的讀數(shù)據(jù)流程

4.2 hdfs讀數(shù)據(jù)流程.jpg

1)客戶端通過DistributedFileSystem向NameNode請求下載數(shù)據(jù),NameNode通過查詢元數(shù)據(jù),找到文件塊所在的DataNode地址。
2)挑選一臺DataNode(就近原則,然后隨機)服務器,請求讀取數(shù)據(jù)。
3)DataNode開始傳輸數(shù)據(jù)給客戶端(從磁盤里面讀取數(shù)據(jù)輸入流,以Packet為單位來做檢驗)。
4)客戶端以Packrt為單位接受,先在本地緩存,然后寫入目標文件。

小結(jié)

本節(jié)是hdfs屬于重點理解部分,注意寫入數(shù)據(jù)是找到一個dn1節(jié)點,dn1一方面將數(shù)據(jù)同步到磁盤,另一方面將數(shù)據(jù)傳給后面dn2;另外要注意的是hdfs的讀數(shù)據(jù)流程是串行讀;另外一個怎樣選擇節(jié)點(同一機器,同一機架,同一網(wǎng)絡)。

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

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

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