HDFS-數(shù)據(jù)流

copyFromLocal的流程

圖片1.png

三個(gè)節(jié)點(diǎn)之間是一種流式的關(guān)系

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

副本選擇機(jī)制

第一個(gè)副本在Client最近的節(jié)點(diǎn)上
第二個(gè)副本與第一個(gè)副本位于相同機(jī)架
第三個(gè)副本位于不同機(jī)架

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

HDFS讀數(shù)據(jù).png

1)客戶端通過Distributed FileSystem向NameNode請(qǐng)求下載文件,NameNode通過查詢?cè)獢?shù)據(jù),找到文件塊所在的DataNode地址。
2)挑選一臺(tái)DataNode(就近原則,然后隨機(jī))服務(wù)器,請(qǐng)求讀取數(shù)據(jù)。讀到了,就不理其他的了。
3)DataNode開始傳輸數(shù)據(jù)給客戶端(從磁盤里面讀取數(shù)據(jù)輸入流,以Packet為單位來做校驗(yàn))。
4)客戶端以Packet為單位接收,先在本地緩存,然后寫入目標(biāo)文件。

?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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