HDFS讀寫流程

本文章主題:

  • 寫流程
  • 讀流程
HDFS遵循一次寫入多次讀取的原則步悠,因此已經(jīng)寫入文件系統(tǒng)的文件是無法修改的,只能進行刪除瘫镇,添加鼎兽,讀取操作。
  • 寫流程

write.png
  1. 客戶端調用DistributedFileSystem的Create()方法來創(chuàng)建一個新文件铣除,DistributedFileSystem通過RPC向NameNode申請寫入新文件谚咬;
  • NameNode通過對文件的權限以及文件是否已存在進行校驗,校驗通過則返回具體blockId以及DataNode列表給DistributedFileSystem通孽,并在日志文件中追加記錄序宦。否則返回失敗信息;

  • DistributedFileSystem返回給客戶端一個FSDataOutputStream對象,供客戶端進行寫操作互捌。FSDataOutputStream對象中封裝了一個DFSOutputStream對象潘明,管理著NameNode與DataNode之間的通信;

  • 客戶端調用FSDataOutputStream對象的write()方法開始寫入數(shù)據(jù)秕噪,DFSOutputStream對象將數(shù)據(jù)分成一個個數(shù)據(jù)包(package)并寫入“數(shù)據(jù)隊列”(data queue) 钳降;

  • DataStreamer根據(jù)DataNode列表要求NameNode分配合適的新塊來處理數(shù)據(jù)復本;

  • 這組DataNode組成一條管線腌巾,假如復本數(shù)為3遂填,則這條管線就擁有3個復本。-- DataStreamer將數(shù)據(jù)包流式傳輸?shù)焦芫€中的第1個DataNode中澈蝙,DataNode存儲數(shù)據(jù)并將數(shù)據(jù)包傳輸給第2個吓坚,以此類推直至傳輸?shù)焦芫€中的最后一個節(jié)點;

  • DFSOutputStream同時維護著一個“確認隊列”(ack queue) 來等待DataNode存儲成功的確認回執(zhí)灯荧,數(shù)據(jù)包從最后一個節(jié)點依次往前傳遞礁击,DFSOutputStream收到所有確認信息之后,則刪除數(shù)據(jù)包逗载;

  • 客戶端完成數(shù)據(jù)的寫入之后哆窿,調用close()方法,關閉FSDataOutputStream厉斟;

  • DistributedFileSystem通知NameNode文件寫入成功挚躯,NameNode同時將元數(shù)據(jù)寫入內(nèi)存;

  • 寫過程故障處理:

    • 關閉管線擦秽,將數(shù)據(jù)包添加回數(shù)據(jù)隊列的最前端码荔,以確保下游的DataNode不會漏掉任何一個數(shù)據(jù)包;
    • 找到一個存儲著當前數(shù)據(jù)塊的DataNode(正常的)感挥,為它加上一個新的標識目胡,并且將該標識傳送給NameNode,便于在故障DataNode在恢復之后可以刪除存儲的部分數(shù)據(jù)塊链快;
    • 從管線中刪除故障節(jié)點,并且將數(shù)據(jù)塊寫入另外兩個正常節(jié)點眉尸;
    • 當NameNode發(fā)現(xiàn)block復本數(shù)不足的時候域蜗,會在另外一個節(jié)點上創(chuàng)建一個新復本。
  • 讀流程

read.png
  1. 客戶端調用DistributedFileSystem的open()方法噪猾,告訴分布式文件系統(tǒng)對象(DistributedFileSystem)希望打開某個文件霉祸;
  • DistributedFileSystem通過RPC來調用NameNode節(jié)點,并從中獲取block文件塊的在datanode地址袱蜡;
  • DistributedFileSystem將位置信息封裝成FSDataInputStream對象返回給客戶端丝蹭,F(xiàn)SDataInputStream對象中封裝了一個DFSInputStream對象,它管理著DataNode與NameNode之間的I/O坪蚁;
  • 客戶端調用FSDataInputStream對象的read()方法奔穿,DFSInputStream對象隨即連接最近的DataNode镜沽,通過反復調用read()方法,將數(shù)據(jù)從DataNode傳輸給客戶端贱田;
  • 當客戶端將所有的數(shù)據(jù)塊讀取完成缅茉,調用FSDataInputStream的close()方法,關閉數(shù)據(jù)流男摧;
  • 在讀取過程中出錯蔬墩,DFSInputStream會嘗試讀取臨近DataNode中的block;
  • 在每讀完一個block耗拓,DFSInputStream都會檢驗數(shù)據(jù)的完整性诀浪,如果有損壞顿肺,會試圖在從其它DataNode讀取復本之前通知NameNode。

** RPC是通過Java的動態(tài)代理以及Java的NIO實現(xiàn)的。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末验夯,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子雌芽,更是在濱河造成了極大的恐慌瓶堕,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件们妥,死亡現(xiàn)場離奇詭異猜扮,居然都是意外死亡,警方通過查閱死者的電腦和手機监婶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門旅赢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人惑惶,你說我怎么就攤上這事煮盼。” “怎么了带污?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵僵控,是天一觀的道長。 經(jīng)常有香客問我鱼冀,道長报破,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任千绪,我火速辦了婚禮充易,結果婚禮上,老公的妹妹穿的比我還像新娘荸型。我一直安慰自己盹靴,他們只是感情好,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著稿静,像睡著了一般梭冠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上自赔,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天妈嘹,我揣著相機與錄音,去河邊找鬼绍妨。 笑死润脸,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的他去。 我是一名探鬼主播毙驯,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼灾测!你這毒婦竟也來了爆价?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤媳搪,失蹤者是張志新(化名)和其女友劉穎铭段,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體秦爆,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡序愚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了等限。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片爸吮。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖望门,靈堂內(nèi)的尸體忽然破棺而出形娇,到底是詐尸還是另有隱情,我是刑警寧澤筹误,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布桐早,位于F島的核電站,受9級特大地震影響厨剪,放射性物質發(fā)生泄漏勘畔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一丽惶、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧爬立,春花似錦钾唬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽奕巍。三九已至,卻和暖如春儒士,著一層夾襖步出監(jiān)牢的瞬間的止,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工着撩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留诅福,地道東北人。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓拖叙,卻偏偏與公主長得像氓润,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子薯鳍,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

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

  • HDFS讀寫流程剖析 本文為 《Hadoop The Definitive Guide 4th Edition》的...
    希爾大閱讀 3,767評論 0 2
  • 先思考問題 我們處在一個大數(shù)據(jù)的時代已經(jīng)是不爭的事實咖气,這主要表現(xiàn)在數(shù)據(jù)源多且大,如互聯(lián)網(wǎng)數(shù)據(jù)挖滤,人們也認識到數(shù)據(jù)里往...
    墻角兒的花閱讀 7,363評論 0 9
  • 一崩溪、操作方式 Hadoop支持的文件系統(tǒng)由很多(見下圖),HDFS只是其中一種實現(xiàn)斩松。Java抽象類org.apac...
    Mervey閱讀 1,307評論 0 0
  • 正如標題所示伶唯,這個系列純屬是為了了解世界,生活在現(xiàn)代砸民,我們都有自己的圈子抵怎,也有了微信的朋友圈去觀望一下他人的世界,...
    思踐于人閱讀 368評論 0 0
  • 我的家鄉(xiāng)在云臺山腳下岭参,小村莊就像一個孩子反惕,依偎在云臺山的懷抱。 沒有人去測量山的海拔演侯,因為崇敬它不會在...
    gwm閱讀 300評論 0 2