本章大綱
4.1 HDFS寫數(shù)據(jù)流程
4.1.1 剖析文件寫入
HDFS寫數(shù)據(jù)流程,如圖所示。
HDFS寫數(shù)據(jù)流程
1)客戶端通過Distributed FileSystem模塊向NameNode請求上傳文件,NameNode檢查目標(biāo)文件是否已存在,父目錄是否存在。
2)NameNode返回是否可以上傳。
3)客戶端請求第一個(gè) Block上傳到哪幾個(gè)DataNode服務(wù)器上。
4)NameNode返回3個(gè)DataNode節(jié)點(diǎn),分別為dn1、dn2、dn3。
5)客戶端通過FSDataOutputStream模塊請求dn1上傳數(shù)據(jù),dn1收到請求會繼續(xù)調(diào)用dn2,然后dn2調(diào)用dn3,將這個(gè)通信管道建立完成。
6)dn1、dn2、dn3逐級應(yīng)答客戶端。
7)客戶端開始往dn1上傳第一個(gè)Block(先從磁盤讀取數(shù)據(jù)放到一個(gè)本地內(nèi)存緩存),以Packet為單位,dn1收到一個(gè)Packet就會傳給dn2,dn2傳給dn3;dn1每傳一個(gè)packet會放入一個(gè)應(yīng)答隊(duì)列等待應(yīng)答。
8)當(dāng)一個(gè)Block傳輸完成之后,客戶端再次請求NameNode上傳第二個(gè)Block的服務(wù)器。(重復(fù)執(zhí)行3-7步)。
4.1.2 網(wǎng)絡(luò)拓?fù)?節(jié)點(diǎn)距離計(jì)算
在HDFS寫數(shù)據(jù)的過程中,NameNode會選擇距離待上傳數(shù)據(jù)最近距離的DataNode接收數(shù)據(jù)。那么這個(gè)最近距離怎么計(jì)算呢?
節(jié)點(diǎn)距離:兩個(gè)節(jié)點(diǎn)到達(dá)最近的共同祖先的距離總和。
網(wǎng)絡(luò)拓?fù)涓拍?/p>
例如,假設(shè)有數(shù)據(jù)中心d1機(jī)架r1中的節(jié)點(diǎn)n1。該節(jié)點(diǎn)可以表示為/d1/r1/n1。利用這種標(biāo)記,這里給出四種距離描述。
大家算一算每兩個(gè)節(jié)點(diǎn)之間的距離
節(jié)點(diǎn)距離計(jì)算
4.1.3 機(jī)架感知(副本存儲節(jié)點(diǎn)選擇)
1.官方ip地址
機(jī)架感知說明
http://hadoop.Apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html#Data_Replication
For the common case, when the replication factor is three, HDFS’s placement policy is to put one replica on one node in the local rack, another on a different node in the local rack, and the last on a different node in a different rack.
2.Hadoop2.7.2副本節(jié)點(diǎn)選擇
4.2 HDFS讀數(shù)據(jù)流程
HDFS的讀數(shù)據(jù)流程
HDFS讀數(shù)據(jù)流程
1)客戶端通過Distributed FileSystem向NameNode請求下載文件,NameNode通過查詢元數(shù)據(jù),找到文件塊所在的DataNode地址。
2)挑選一臺DataNode(就近原則,然后隨機(jī))服務(wù)器,請求讀取數(shù)據(jù)。
3)DataNode開始傳輸數(shù)據(jù)給客戶端(從磁盤里面讀取數(shù)據(jù)輸入流,以Packet為單位來做校驗(yàn))。
4)客戶端以Packet為單位接收,先在本地緩存,然后寫入目標(biāo)文件。
本章總結(jié):
本章總結(jié)
思維導(dǎo)圖下載地址:鏈接:
https://pan.baidu.com/s/16mVF2rt0NDWmswsudZryMQ 密碼: oq53






