HDFS 系列三:HDFS 數據流

3. HDFS 數據流

3.1 HDFS 寫數據流程

3.1.1 剖析文件寫入

  1. Client 向 NameNode 通信請求上傳文件,NameNode 檢查目標文件是否已經存在,父目錄是否已經存在

  2. NameNode 返回是否可以上傳

  3. Client 先對文件進行切分,請求第一個 block 該傳輸到哪些 DataNode 服務器上

  4. NameNode 返回3個 DataNode 服務器 DataNode 1,DataNode 2,DataNode 3

  5. Client 請求3臺中的一臺 DataNode 1(網絡拓撲上的就近原則,如果都一樣,則隨機挑選一臺DataNode)上傳數據(本質上是一個RPC調用,建立pipeline),DataNode 1 收到請求會繼續調用 DataNode 2,然後 DataNode 2 調用 DataNode 3,將整個 pipeline 建立完成,然後逐級返回客戶端

  6. Client 開始往 DataNode 1 上傳第一個 block (先從磁盤讀取數據放到一個本地內存緩存),以 packet 爲單位。寫入的時候 DataNode 會進行數據校驗,它並不是通過一個 packet 進行一次校驗而是以 chunk 爲單位進行校驗(512byte)。DataNode 1 收到一個 packet 就會傳給 DataNode 2,DataNode 2 傳給 DataNode 3,DataNode 1 每傳一個 packet 會放入一個應答隊列等待應答

  7. 當一個 block 傳輸完成之後,Client 再次請求 NameNode 上傳第二個block的服務器

3.1.2 網絡拓撲概念

在本地網絡中,兩個節點被稱爲“彼此近鄰”是什麼意思?

在海量數據處理中,其主要限制因素是節點之間數據的傳輸速率——帶寬很稀缺

這裏的想法是將兩個節點間的帶寬作爲距離的衡量標準

節點距離:兩個節點到達最近的共同祖先的距離總和

例如,假設有 數據中心d1 機架r1 中的節點 n1,該節點可以表示爲/d1/r1/n1,利用這種標記,這裏給出四種距離描述:

Distance(/d1/r1/n1, /d1/r1/n1)=0(同一節點上的進程)
Distance(/d1/r1/n1, /d1/r1/n2)=2(同一機架上的不同節點)
Distance(/d1/r1/n1, /d1/r3/n2)=4(同一數據中心不同機架上的節點)
Distance(/d1/r1/n1, /d2/r4/n2)=6(不同數據中心的節點)

image

3.1.3 機架感知(副本節點選擇)

官方介紹:

http://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-common/RackAwareness.html
http://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html#Data_Replication

3.1.3.1 低版 本Hadoop 副本節點選擇

第一個副本在 Client 所處的節點上,如果客戶端在集羣外,隨機選一個

第二個副本和第一個副本位於不相同機架的隨機節點上

第三個副本和第二個副本位於相同機架,節點隨機

image

3.1.3.2 Hadoop 2.9.2 副本節點選擇

第一個副本在 Client 所處的節點上,如果客戶端在集羣外,隨機選一個。

第二個副本和第一個副本位於相同機架,隨機節點

第三個副本位於不同機架,隨機節點

image

3.2 HDFS 讀數據流程

  1. 與 NameNode 通信查詢元數據,找到文件塊所在的 DataNode 服務器

  2. 挑選一臺 DataNode(網絡拓撲上的就近原則,如果都一樣,則隨機挑選一臺 DataNode)服務器,請求建立 socket 流

  3. DataNode 開始發送數據(從磁盤裏面讀取數據放入流, packet(一個 packet 爲64kb)爲單位來做校驗)

  4. 客戶端以 packet 爲單位接收,先在本地緩存,然後寫入目標文件

image

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章