Hadoop DataNode的讀和寫流程

從上一篇文章中我們已經知道了NameNode和Secondary NameNode的職責,這篇文章我們主要講講我們怎么往DataNode上寫數據和讀數據。

DataNode的寫操作流程

DataNode的寫操作流程可以分為兩部分,第一部分是寫操作之前的準備工作,包括與NameNode的通信等;第二部分是真正的寫操作。我們先看第一部分。

  1. 首先,HDFS client會去詢問NameNode,看哪些DataNode可以存儲Block A-file.txt文件的拆分是在HDFS client中完成的,拆分成了3個Block (A,B,C)。因為NameNode存儲著整個文件系統的元數據,它知道哪個DataNode上有空間可以存儲這個Block A。
  2. NameNode通過查看它的元數據信息,發現DataNode1,2,7上有空間可以存儲Block A,于是將此信息告訴HDFS Client。
  3. HDFS Client接到NameNode返回的DataNode列表信息后,它會直接聯系第一個DataNode-DataNode1,讓它準備好接收Block A - 實際上就是建立彼此間的TCP連接。然后將Block A和NameNode返回的所有關于DataNode的元數據一并傳給DataNode1.
  4. 在DataNode1與HDFS Client建立好TCP連接后,它會把HDFS Client要寫Block A的請求順序傳給DataNode2(在與HDFS Client建立好TCP連接后從HDFS Client獲得的DataNodeli信息),要求DataNode2也準備好接收Block A(建立DataNode2到DataNode1的TCP連接)。
  5. 同上,建立DataNode2到DataNode7的TCP連接。
  6. 當DataNode7準備好之后,它會通知DataNode2,表明可以開始接收Block A。
  7. 同理,當DataNode2準備好之后,它會通知DataNode1,表明可以開始接收Block A。
  8. 當HDFS Client接到DataNode1的成功反饋信息后,說明這3個DataNode都準備好了,HDFS Client就會開始往這三個DataNode寫入Block A。

下面這張圖片展示了HDFS Client如何往DataNode寫入Block A數據。


在DataNode1,2,7都準備好接收數據后,HDFS Client開始往DataNode1寫入Block A數據。同準備工作一樣,當DataNode1接收完Block A數據后,它會順序將Block A數據傳輸給DataNode2,然后DataNode2再傳輸給DataNode7. 每個DataNode在接收完Block A數據后,會發消息給NameNode,告訴它Block數據已經接收完畢,NameNode同時會根據它接收到的消息更新它保存的文件系統元數據信息。當Block A成功寫入3個DataNode之后,DataNode1會發送一個成功信息給HDFS Client,同時HDFS Client也會發一個Block A成功寫入的信息給NameNode。之后,HDFS Client才能開始繼續處理下一個Block-Block B。

機架感知

其實NameNode在挑選合適的DataNode去存儲Block的時候,不僅僅考慮了DataNode的存儲空間夠不夠,還會考慮這些DataNode在不在同一個機架上。這就需要NameNode必須知道所有的DataNode分別位于哪個機架上(所以也稱為機架感知)。當然,默認情況下NameNode是不會知道機架的存在的,也就是說,默認情況下,NameNode會認為所有的DataNode都在同一個機架上(/defaultRack)。除非我們在hdfs-site.xml里面配置topology.script.file.name選項,這個選項的值是一個可執行文件的位置,而該只執行文件的作用是將輸入的DataNode的ip地址按照一定規則計算,然后輸出它所在的機架的名字,如/rack1, /rack2之類。借助這個文件,NameNode就具備了機架感知了。當它在挑選DataNode去存儲Block的時候,它會遵循以下原則:

  1. 首先挑選跟HDFS Client所在的DataNode作為存放第一個Block副本的位置,如果HDFS Client不在任何一個DataNode上,比如說Hadoop集群外你自己的電腦,那么就任意選取一個DataNode。
  1. 其次,會借助NameNode的機架感知特性,選取跟第一個Block副本所在DataNode不同的機架上的任意一個DataNode來存放Block的第二個副本,比如說/rack2。Block的第三個副本也會存在這個/rack2上,但是是另外一個DataNode
  2. 最后,如果我們設置的副本的數量大于3,那么剩下的副本則隨意存儲在集群中。

所以,按照上面的原則,在HDFS Client進行Block的寫操作時,流程應該如下面圖所示:


DataNode的讀數據流程

最后,我們來看看HDFS Client是如何從DataNode讀取數據的。


如上圖所示,首先,HDFS Client會先去聯系NameNode,詢問file.txt總共分為幾個Block而且這些Block分別存放在哪些DataNode上。由于每個Block都會存在幾個副本,所以NameNode會把file.txt文件組成的Block所對應的所有DataNode列表都返回給HDFS Client。然后HDFS Client會選擇DataNode列表里的第一個DataNode去讀取對應的Block,比如由于Block A存儲在DataNode1,2,7,那么HDFS Client會到DataNode1去讀取Block A;Block C存儲在DataNode,7,8,9,那么HDFS Client就回到DataNode7去讀取Block C。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,333評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,491評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,263評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,946評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,708評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,186評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,409評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,939評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,774評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,976評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,209評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,641評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,872評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,650評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,958評論 2 373

推薦閱讀更多精彩內容

  • 首先,我們在使用前先看看HDFS是什麼?這將有助于我們是以后的運維使用和故障排除思路的獲得。 HDFS采用mast...
    W_Bousquet閱讀 4,217評論 0 2
  • hadoop HDFS原理解析01 HDFS架構?NameNode?DataNode?Sencondary Nam...
    白菜青蘿卜閱讀 2,749評論 2 30
  • 感恩,知足,珍惜。
    詩水年華閱讀 224評論 0 0
  • 冬天東北的風,是凜冽的,是刺骨的,北風吹得鼻涕次啦,鼻涕還沒流淌出鼻孔,鼻孔內就感覺到硬硬的冰點。北風吹得臉頰刺痛...
    Iris_虹閱讀 257評論 0 0
  • 阿黎拖著巨大的婚紗擺一路從教堂奔到公路,心里暗罵某人,不知道她連考個四百米都叫苦不迭的人嗎,溜得跟兔子一樣怎么追啊...
    豆芽green閱讀 224評論 2 2