Hadoop DataNode的讀和寫流程

從上一篇文章中我們已經(jīng)知道了NameNode和Secondary NameNode的職責(zé)增显,這篇文章我們主要講講我們怎么往DataNode上寫數(shù)據(jù)和讀數(shù)據(jù)蚓庭。

DataNode的寫操作流程

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

  1. 首先梧油,HDFS client會(huì)去詢問NameNode苫耸,看哪些DataNode可以存儲(chǔ)Block A-file.txt文件的拆分是在HDFS client中完成的,拆分成了3個(gè)Block (A,B,C)儡陨。因?yàn)镹ameNode存儲(chǔ)著整個(gè)文件系統(tǒng)的元數(shù)據(jù)褪子,它知道哪個(gè)DataNode上有空間可以存儲(chǔ)這個(gè)Block A量淌。
  2. NameNode通過查看它的元數(shù)據(jù)信息,發(fā)現(xiàn)DataNode1嫌褪,2呀枢,7上有空間可以存儲(chǔ)Block A,于是將此信息告訴HDFS Client笼痛。
  3. HDFS Client接到NameNode返回的DataNode列表信息后裙秋,它會(huì)直接聯(lián)系第一個(gè)DataNode-DataNode1,讓它準(zhǔn)備好接收Block A - 實(shí)際上就是建立彼此間的TCP連接晃痴。然后將Block A和NameNode返回的所有關(guān)于DataNode的元數(shù)據(jù)一并傳給DataNode1.
  4. 在DataNode1與HDFS Client建立好TCP連接后残吩,它會(huì)把HDFS Client要寫B(tài)lock A的請求順序傳給DataNode2(在與HDFS Client建立好TCP連接后從HDFS Client獲得的DataNodeli信息),要求DataNode2也準(zhǔn)備好接收Block A(建立DataNode2到DataNode1的TCP連接)倘核。
  5. 同上泣侮,建立DataNode2到DataNode7的TCP連接。
  6. 當(dāng)DataNode7準(zhǔn)備好之后紧唱,它會(huì)通知DataNode2活尊,表明可以開始接收Block A。
  7. 同理漏益,當(dāng)DataNode2準(zhǔn)備好之后蛹锰,它會(huì)通知DataNode1,表明可以開始接收Block A绰疤。
  8. 當(dāng)HDFS Client接到DataNode1的成功反饋信息后铜犬,說明這3個(gè)DataNode都準(zhǔn)備好了,HDFS Client就會(huì)開始往這三個(gè)DataNode寫入Block A轻庆。

下面這張圖片展示了HDFS Client如何往DataNode寫入Block A數(shù)據(jù)癣猾。


在DataNode1,2,7都準(zhǔn)備好接收數(shù)據(jù)后,HDFS Client開始往DataNode1寫入Block A數(shù)據(jù)余爆。同準(zhǔn)備工作一樣纷宇,當(dāng)DataNode1接收完Block A數(shù)據(jù)后,它會(huì)順序?qū)lock A數(shù)據(jù)傳輸給DataNode2蛾方,然后DataNode2再傳輸給DataNode7. 每個(gè)DataNode在接收完Block A數(shù)據(jù)后像捶,會(huì)發(fā)消息給NameNode,告訴它Block數(shù)據(jù)已經(jīng)接收完畢桩砰,NameNode同時(shí)會(huì)根據(jù)它接收到的消息更新它保存的文件系統(tǒng)元數(shù)據(jù)信息拓春。當(dāng)Block A成功寫入3個(gè)DataNode之后,DataNode1會(huì)發(fā)送一個(gè)成功信息給HDFS Client亚隅,同時(shí)HDFS Client也會(huì)發(fā)一個(gè)Block A成功寫入的信息給NameNode痘儡。之后,HDFS Client才能開始繼續(xù)處理下一個(gè)Block-Block B枢步。

機(jī)架感知

其實(shí)NameNode在挑選合適的DataNode去存儲(chǔ)Block的時(shí)候沉删,不僅僅考慮了DataNode的存儲(chǔ)空間夠不夠渐尿,還會(huì)考慮這些DataNode在不在同一個(gè)機(jī)架上。這就需要NameNode必須知道所有的DataNode分別位于哪個(gè)機(jī)架上(所以也稱為機(jī)架感知)矾瑰。當(dāng)然砖茸,默認(rèn)情況下NameNode是不會(huì)知道機(jī)架的存在的,也就是說殴穴,默認(rèn)情況下凉夯,NameNode會(huì)認(rèn)為所有的DataNode都在同一個(gè)機(jī)架上(/defaultRack)。除非我們在hdfs-site.xml里面配置topology.script.file.name選項(xiàng)采幌,這個(gè)選項(xiàng)的值是一個(gè)可執(zhí)行文件的位置劲够,而該只執(zhí)行文件的作用是將輸入的DataNode的ip地址按照一定規(guī)則計(jì)算,然后輸出它所在的機(jī)架的名字休傍,如/rack1, /rack2之類征绎。借助這個(gè)文件,NameNode就具備了機(jī)架感知了磨取。當(dāng)它在挑選DataNode去存儲(chǔ)Block的時(shí)候人柿,它會(huì)遵循以下原則:

  1. 首先挑選跟HDFS Client所在的DataNode作為存放第一個(gè)Block副本的位置,如果HDFS Client不在任何一個(gè)DataNode上忙厌,比如說Hadoop集群外你自己的電腦凫岖,那么就任意選取一個(gè)DataNode。
  1. 其次逢净,會(huì)借助NameNode的機(jī)架感知特性哥放,選取跟第一個(gè)Block副本所在DataNode不同的機(jī)架上的任意一個(gè)DataNode來存放Block的第二個(gè)副本,比如說/rack2爹土。Block的第三個(gè)副本也會(huì)存在這個(gè)/rack2上甥雕,但是是另外一個(gè)DataNode
  2. 最后,如果我們設(shè)置的副本的數(shù)量大于3着饥,那么剩下的副本則隨意存儲(chǔ)在集群中。

所以惰赋,按照上面的原則宰掉,在HDFS Client進(jìn)行Block的寫操作時(shí),流程應(yīng)該如下面圖所示:


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

最后赁濒,我們來看看HDFS Client是如何從DataNode讀取數(shù)據(jù)的轨奄。


如上圖所示,首先拒炎,HDFS Client會(huì)先去聯(lián)系NameNode挪拟,詢問file.txt總共分為幾個(gè)Block而且這些Block分別存放在哪些DataNode上。由于每個(gè)Block都會(huì)存在幾個(gè)副本击你,所以NameNode會(huì)把file.txt文件組成的Block所對應(yīng)的所有DataNode列表都返回給HDFS Client玉组。然后HDFS Client會(huì)選擇DataNode列表里的第一個(gè)DataNode去讀取對應(yīng)的Block谎柄,比如由于Block A存儲(chǔ)在DataNode1,2惯雳,7朝巫,那么HDFS Client會(huì)到DataNode1去讀取Block A;Block C存儲(chǔ)在DataNode石景,7劈猿,8,9潮孽,那么HDFS Client就回到DataNode7去讀取Block C揪荣。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市往史,隨后出現(xiàn)的幾起案子仗颈,更是在濱河造成了極大的恐慌,老刑警劉巖怠堪,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件揽乱,死亡現(xiàn)場離奇詭異,居然都是意外死亡粟矿,警方通過查閱死者的電腦和手機(jī)凰棉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來陌粹,“玉大人撒犀,你說我怎么就攤上這事√椭龋” “怎么了或舞?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蒙幻。 經(jīng)常有香客問我映凳,道長,這世上最難降的妖魔是什么邮破? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任诈豌,我火速辦了婚禮,結(jié)果婚禮上抒和,老公的妹妹穿的比我還像新娘矫渔。我一直安慰自己,他們只是感情好摧莽,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布庙洼。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪油够。 梳的紋絲不亂的頭發(fā)上蚁袭,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機(jī)與錄音叠聋,去河邊找鬼撕阎。 笑死,一個(gè)胖子當(dāng)著我的面吹牛碌补,可吹牛的內(nèi)容都是我干的虏束。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼厦章,長吁一口氣:“原來是場噩夢啊……” “哼镇匀!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起袜啃,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤汗侵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后群发,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體晰韵,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年熟妓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了雪猪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,605評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡起愈,死狀恐怖只恨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情抬虽,我是刑警寧澤官觅,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站阐污,受9級特大地震影響休涤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜笛辟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一功氨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧隘膘,春花似錦疑故、人聲如沸杠览。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至管钳,卻和暖如春钦铁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背才漆。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工牛曹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人醇滥。 一個(gè)月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓黎比,卻偏偏與公主長得像,于是被迫代替她去往敵國和親鸳玩。 傳聞我的和親對象是個(gè)殘疾皇子阅虫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 首先,我們在使用前先看看HDFS是什麼不跟?這將有助于我們是以后的運(yùn)維使用和故障排除思路的獲得颓帝。 HDFS采用mast...
    W_Bousquet閱讀 4,181評論 0 2
  • Hadoop部署方式 本地模式 偽分布模式(在一臺(tái)機(jī)器中模擬,讓所有進(jìn)程在一臺(tái)機(jī)器上運(yùn)行) 集群模式 服務(wù)器只是一...
    陳半仙兒閱讀 1,603評論 0 9
  • hadoop HDFS原理解析01 HDFS架構(gòu)?NameNode?DataNode?Sencondary Nam...
    白菜青蘿卜閱讀 2,719評論 2 30
  • 感恩窝革,知足购城,珍惜。
    詩水年華閱讀 215評論 0 0
  • 冬天東北的風(fēng)虐译,是凜冽的瘪板,是刺骨的,北風(fēng)吹得鼻涕次啦菱蔬,鼻涕還沒流淌出鼻孔篷帅,鼻孔內(nèi)就感覺到硬硬的冰點(diǎn)。北風(fēng)吹得臉頰刺痛...
    Iris_虹閱讀 249評論 0 0