HDFS詳解

Hadoop2.X后可以劃分為三部分:HDFS、MapReduce和Yarn认臊,本篇主要看一下HDFS。

架構(gòu)圖

進程及作用

當(dāng)我們在安裝Hadoop的機器上執(zhí)行jps命令,我們會看到如下三個進程:NameNode坦刀、Secondary NameNode和DataNode。接下來了解一下這個三個進程的作用绑警。

  • NameNode

    管理者文件系統(tǒng)的Namespace求泰。它維護著文件系統(tǒng)樹(filesystem tree)以及文件樹中所有的文件和文件夾的元數(shù)據(jù)(metadata)。管理這些信息的文件有兩個计盒,分別是Namespace 鏡像文件(Namespace image)和操作日志文件(edit log)渴频,這些信息被Cache在RAM中,當(dāng)然北启,這兩個文件也會被持久化存儲在本地硬盤卜朗。Namenode記錄著每個文件中各個塊所在的數(shù)據(jù)節(jié)點的位置信息,但是他并不持久化存儲這些信息咕村,因為這些信息會在系統(tǒng)啟動時從數(shù)據(jù)節(jié)點重建场钉。

  • Secondary NameNode

    監(jiān)控HDFS狀態(tài)的輔助后臺程序。就想NameNode一樣懈涛,每個集群都有一個SecondaryNameNode逛万,并且部署在一個單獨的服務(wù)器上。Secondary NameNode不同于NameNode批钠,它不接受或者記錄任何實時的數(shù)據(jù)變化宇植,但是得封,它會與NameNode進行通信,以便定期地保存HDFS元數(shù)據(jù)的快照指郁。由于NameNode是單點的忙上,通過Secondary NameNode的快照功能,可以將NameNode的宕機時間和數(shù)據(jù)損失降低到最小闲坎。同時疫粥,如果NameNode發(fā)生問題,Secondary NameNode可以及時地作為備用NameNode使用腰懂。

      合并時機
      core-site.xml配置項
      fs.checkpoint.period表示多長時間記錄一次hdfs的鏡像
      fs.checkpoint.size表示一次記錄多大的size梗逮,默認64M
      當(dāng)?shù)胶喜r間時合并,如果沒到合并時間記錄size到達64M則合并
    
  • Datanode

    Datanode是文件系統(tǒng)的工作節(jié)點悯恍,他們根據(jù)客戶端或者是NameNode的調(diào)度存儲和檢索數(shù)據(jù)库糠,并且定期向NameNode發(fā)送他們所存儲的塊(block)的列表。

      Block的放置策略
      第一個副本:放置在上傳文件的DataNode
        如果是集群外提交的,則隨機挑選一臺涮毫,磁盤不太滿瞬欧,cpu不太忙的節(jié)點
      第二個副本:放置在于第一個副本不同的機架節(jié)點
      第三個副本:與第二個副本相同的機架的節(jié)點上
      更多副本:隨機節(jié)點
    

讀寫文件

寫入文件

  1. 初始化FileSystem,客戶端調(diào)用create()來創(chuàng)建文件

  2. FileSystem用RPC調(diào)用元數(shù)據(jù)節(jié)點罢防,在文件系統(tǒng)的命名空間中創(chuàng)建一個新的文件艘虎,元數(shù)據(jù)節(jié)點首先確定文件原來不存在,并且客戶端有創(chuàng)建文件的權(quán)限咒吐,然后創(chuàng)建新文件野建。

  3. FileSystem返回DFSOutputStream,客戶端用于寫數(shù)據(jù)恬叹,客戶端開始寫入數(shù)據(jù)候生。

  4. DFSOutputStream將數(shù)據(jù)分成塊,寫入data queue绽昼。data queue由Data Streamer讀取唯鸭,并通知元數(shù)據(jù)節(jié)點分配數(shù)據(jù)節(jié)點,用來存儲數(shù)據(jù)塊(每塊默認復(fù)制3塊)硅确。分配的數(shù)據(jù)節(jié)點放在一個pipeline里目溉。Data Streamer將數(shù)據(jù)塊寫入pipeline中的第一個數(shù)據(jù)節(jié)點。第一個數(shù)據(jù)節(jié)點將數(shù)據(jù)塊發(fā)送給第二個數(shù)據(jù)節(jié)點菱农。第二個數(shù)據(jù)節(jié)點將數(shù)據(jù)發(fā)送給第三個數(shù)據(jù)節(jié)點缭付。

  5. DFSOutputStream為發(fā)出去的數(shù)據(jù)塊保存了ack queue,等待pipeline中的數(shù)據(jù)節(jié)點告知數(shù)據(jù)已經(jīng)寫入成功循未。

  6. 當(dāng)客戶端結(jié)束寫入數(shù)據(jù)陷猫,則調(diào)用stream的close函數(shù)。此操作將所有的數(shù)據(jù)塊寫入pipeline中的數(shù)據(jù)節(jié)點,并等待ack queue返回成功绣檬。最后通知元數(shù)據(jù)節(jié)點寫入完畢舅巷。

  7. 如果數(shù)據(jù)節(jié)點在寫入的過程中失敗,關(guān)閉pipeline河咽,將ack queue中的數(shù)據(jù)塊放入data queue的開始,當(dāng)前的數(shù)據(jù)塊在已經(jīng)寫入的數(shù)據(jù)節(jié)點中被元數(shù)據(jù)節(jié)點賦予新的標示赋元,則錯誤節(jié)點重啟后能夠察覺其數(shù)據(jù)塊是過時的忘蟹,會被刪除。失敗的數(shù)據(jù)節(jié)點從pipeline中移除搁凸,另外的數(shù)據(jù)塊則寫入pipeline中的另外兩個數(shù)據(jù)節(jié)點媚值。元數(shù)據(jù)節(jié)點則被通知此數(shù)據(jù)塊是復(fù)制塊數(shù)不足,將來會再創(chuàng)建第三份備份护糖。

讀取文件

  1. 初始化FileSystem褥芒,然后客戶端(client)用FileSystem的open()函數(shù)打開文件

  2. FileSystem用RPC調(diào)用元數(shù)據(jù)節(jié)點,得到文件的數(shù)據(jù)塊信息嫡良,對于每一個數(shù)據(jù)塊锰扶,元數(shù)據(jù)節(jié)點返回保存數(shù)據(jù)塊的數(shù)據(jù)節(jié)點的地址。

  3. FileSystem返回FSDataInputStream給客戶端寝受,用來讀取數(shù)據(jù)坷牛,客戶端調(diào)用stream的read()函數(shù)開始讀取數(shù)據(jù)。

  4. DFSInputStream連接保存此文件第一個數(shù)據(jù)塊的最近的數(shù)據(jù)節(jié)點很澄,data從數(shù)據(jù)節(jié)點讀到客戶端(client)

  5. 當(dāng)此數(shù)據(jù)塊讀取完畢時京闰,DFSInputStream關(guān)閉和此數(shù)據(jù)節(jié)點的連接,然后連接此文件下一個數(shù)據(jù)塊的最近的數(shù)據(jù)節(jié)點甩苛。

  6. 當(dāng)客戶端讀取完畢數(shù)據(jù)的時候蹂楣,調(diào)用FSDataInputStream的close函數(shù)。

  7. 在讀取數(shù)據(jù)的過程中讯蒲,如果客戶端在與數(shù)據(jù)節(jié)點通信出現(xiàn)錯誤痊土,則嘗試連接包含此數(shù)據(jù)塊的下一個數(shù)據(jù)節(jié)點。

  8. 失敗的數(shù)據(jù)節(jié)點將被記錄爱葵,以后不再連接施戴。

SecondNamenode合并流程


在namenode上的edits文件和fsimage進行合并:

  1. Secondary NameNode請求NameNode進行edit log的滾動(即創(chuàng)建一個新的edit log),將新的編輯操作記錄到新生成的edit log文件萌丈;

  2. 通過http get方式赞哗,讀取NameNode上的fsimage和edits文件,到Secondary NameNode上辆雾;

  3. 讀取fsimage到內(nèi)存中肪笋,即加載fsimage到內(nèi)存,然后執(zhí)行edits中所有操作(類似OracleDG,應(yīng)用redo log)藤乙,并生成一個新的fsimage文件猜揪,即這個檢查點被創(chuàng)建;

  4. 通過http post方式坛梁,將新的fsimage文件傳送到NameNode而姐;

  5. NameNode使用新的fsimage替換原來的fsimage文件,讓(1)創(chuàng)建的edits替代原來的edits文件划咐;并且更新fsimage文件的檢查點時間拴念。

整個處理過程完成。
Secondary NameNode的處理褐缠,是將fsimage和edites文件周期的合并政鼠,不會造成nameNode重啟時造成長時間不可訪問的情況。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末队魏,一起剝皮案震驚了整個濱河市公般,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌胡桨,老刑警劉巖官帘,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異昧谊,居然都是意外死亡遏佣,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門揽浙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來状婶,“玉大人,你說我怎么就攤上這事馅巷√懦妫” “怎么了?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵钓猬,是天一觀的道長稍刀。 經(jīng)常有香客問我,道長敞曹,這世上最難降的妖魔是什么账月? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮澳迫,結(jié)果婚禮上局齿,老公的妹妹穿的比我還像新娘。我一直安慰自己橄登,他們只是感情好抓歼,可當(dāng)我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布讥此。 她就那樣靜靜地躺著,像睡著了一般谣妻。 火紅的嫁衣襯著肌膚如雪萄喳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天蹋半,我揣著相機與錄音他巨,去河邊找鬼。 笑死减江,一個胖子當(dāng)著我的面吹牛闻蛀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播您市,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼役衡!你這毒婦竟也來了茵休?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤手蝎,失蹤者是張志新(化名)和其女友劉穎榕莺,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體棵介,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡钉鸯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了邮辽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片唠雕。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖吨述,靈堂內(nèi)的尸體忽然破棺而出岩睁,到底是詐尸還是另有隱情,我是刑警寧澤揣云,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布捕儒,位于F島的核電站,受9級特大地震影響邓夕,放射性物質(zhì)發(fā)生泄漏刘莹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一焚刚、第九天 我趴在偏房一處隱蔽的房頂上張望点弯。 院中可真熱鬧,春花似錦矿咕、人聲如沸蒲拉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽雌团。三九已至燃领,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間锦援,已是汗流浹背猛蔽。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留灵寺,地道東北人曼库。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像略板,于是被迫代替她去往敵國和親毁枯。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,562評論 2 349

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

  • 認識HDFS HDFS的特點: 高容錯性高吞吐量故障的檢測和自動快速恢復(fù)流式的數(shù)據(jù)訪問大數(shù)據(jù)集一次寫入,多次讀寫 ...
    Bloo_m閱讀 3,247評論 6 8
  • 目錄 HDFS的工作機制 概述 HDFS 寫數(shù)據(jù)流程 HDFS 讀數(shù)據(jù)流程 NameNode的工作機制 NameN...
    Singer_Au閱讀 9,852評論 0 5
  • 可以在http://master:50070上訪問hdfs的web頁面叮称。本文章主題如下: HFDS結(jié)構(gòu) NameN...
    JustCode閱讀 979評論 0 1
  • 今日由青海穿過柴達木盆地到敦煌种玛。一路是茫茫的戈壁危融,經(jīng)歷了好多人生的第一次配喳,第一次行走在盆地,第一次見到戈壁和沙漠嫌蚤。...
    陌上花開我我我閱讀 545評論 0 0
  • Python的內(nèi)存管理機制可以從三個方面來講: 引用計數(shù) 垃圾回收 內(nèi)存池機制 引用計數(shù) Python采用了類似W...
    賭氣的對白閱讀 641評論 0 2