HDFS讀寫(xiě)流程

閑暇之余,梳理了一下HDFS的讀、寫(xiě)數(shù)據(jù)流程。

(一)下圖是HDFS讀數(shù)據(jù)流程圖:
HDFS讀數(shù)據(jù)流程.png
  • 1、客戶端向NameNode建立通信發(fā)送請(qǐng)求讀取某文件,例如:讀取/aa/...txt文件。
  • 2、NameNode獲取文件的元數(shù)據(jù)信息(名稱(chēng)空間、block塊信息,副本數(shù)量),并將目標(biāo)文件的元信息返回給客戶端。

在這里:
①文件名為/aa/...txt,
②每個(gè)數(shù)據(jù)塊有3個(gè)副本,
③共有BLK_1、BLK_2、BLK_3三個(gè)數(shù)據(jù)塊組成,
④BLK_1存儲(chǔ)在DN1、DN3、DN4節(jié)點(diǎn)上,BLK_2存儲(chǔ)在DN1、DN4、DN5節(jié)點(diǎn)上,BLK_3存儲(chǔ)在DN2、DN3、DN5節(jié)點(diǎn)上。

  • 3、客戶端選擇其中的一個(gè)節(jié)點(diǎn)(如圖去DN1上)去請(qǐng)求讀取BLK_1。

這里選擇節(jié)點(diǎn)遵循就近原則,然后隨機(jī)。

  • 4、DN1將BLK_1數(shù)據(jù)傳輸給客戶端。
  • 5、客戶端繼續(xù)選擇其中一個(gè)節(jié)點(diǎn)(如圖DN4上)去請(qǐng)求讀取BLK_2。
  • 6、DN4將BLK_2數(shù)據(jù)傳輸給客戶端,客戶端將BLK_2數(shù)據(jù)追加到BLK_1數(shù)據(jù)后面,這里有個(gè)追加的過(guò)程。
  • 7、客戶端繼續(xù)選擇其中一個(gè)節(jié)點(diǎn)(例如DN2上)去請(qǐng)求BLK_3。
  • 8、DN2節(jié)點(diǎn)將BLK_3數(shù)據(jù)傳輸給客戶端,客戶端將BLK_3數(shù)據(jù)追加到BLK_2后面,最后合并形成一個(gè)文件。
(二)下圖是HDFS寫(xiě)數(shù)據(jù)流程圖:
HDFS寫(xiě)數(shù)據(jù)流程.png
  • 1、客戶端與NameNode建立通信,請(qǐng)求上傳數(shù)據(jù)。NameNode檢查目標(biāo)文件是否存在,父目錄是否存在。
  • 2、NameNode響應(yīng)客戶端是否可以上傳,如圖,可以上傳。
  • 3、客戶端會(huì)先對(duì)文件進(jìn)行切分,比如一128M切分成一個(gè)BLK塊。如圖文件大小是300M就會(huì)被切分成3個(gè)塊:兩個(gè)128M,一個(gè)44M??蛻舳讼騈ameNode請(qǐng)求上傳第一個(gè)block所需要傳輸?shù)侥男〥N服務(wù)器上。
  • 4、NameNode返回DN服務(wù)器信息(DN1、DN3、DN4)。

在這里,考慮因素:空間和距離
DataNode選擇策略:
①第一個(gè)副本先考慮與client最近的(同機(jī)架)
②第二個(gè)副本再考慮跨機(jī)架挑選一個(gè)datanode,增加副本可靠性
③第三個(gè)副本在第一個(gè)副本同機(jī)架另外挑選一臺(tái)datanode存放
配置機(jī)架感知,知道哪個(gè)datanode放在哪個(gè)機(jī)架。

  • 5、客戶端向DN1請(qǐng)求建立傳輸通道channel,DN1向DN3請(qǐng)求建立傳輸通道channel,DN3向DN4請(qǐng)求建立傳輸通道channel。
  • 6、DN4建立好傳輸通道后會(huì)反向向DN3回應(yīng)應(yīng)答成功,同理DN3反向向DN1回應(yīng)應(yīng)答成功,DN1反向向客戶端回應(yīng)應(yīng)答成功,傳輸通道channel已建立。
  • 7、客戶端開(kāi)始傳輸BLK數(shù)據(jù)塊(先從磁盤(pán)讀取數(shù)據(jù)存儲(chǔ)到一個(gè)本地內(nèi)存緩存),以packet為單位(一個(gè)packet為64kb),寫(xiě)入數(shù)據(jù)的時(shí)候DataNode會(huì)進(jìn)行數(shù)據(jù)校驗(yàn),并不是通過(guò)packet為單位校驗(yàn),而是以chunk為單位校驗(yàn)(512byte),DN1收到第一個(gè)packet就會(huì)傳給DN3,DN3傳給DN4;DN1每傳一個(gè)packet就會(huì)放入一個(gè)應(yīng)答隊(duì)列等待應(yīng)答。

在這里,block一個(gè)上傳成功就算成功了,之后NameNode會(huì)做一步同步操作。

  • 8、當(dāng)?shù)谝粋€(gè)block上傳完成后,客戶端再次請(qǐng)求NameNode上傳第二個(gè)block塊。NameNode返回客戶端第二個(gè)block塊可上傳的DataNode服務(wù)器節(jié)點(diǎn)信息。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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