HDFS架構(gòu)和原理

HDFS 是做什么的

HDFS(Hadoop Distributed File System)是Hadoop項目的核心子項目,是分布式計算中數(shù)據(jù)存儲管理的基礎(chǔ),是基于流數(shù)據(jù)模式訪問和處理超大文件的需求而開發(fā)的拌阴,可以運行于廉價的商用服務(wù)器上。它所具有的高容錯兽泣、高可靠性、高可擴展性胁孙、高獲得性唠倦、高吞吐率等特征為海量數(shù)據(jù)提供了不怕故障的存儲,為超大數(shù)據(jù)集(Large Data Set)的應(yīng)用處理帶來了很多便利涮较。

HDFS 從何而來

HDFS 源于 Google 在2003年10月份發(fā)表的GFS(Google File System) 論文稠鼻。 它其實就是 GFS 的一個克隆版本

為什么選擇 HDFS 存儲數(shù)據(jù)

之所以選擇 HDFS 存儲數(shù)據(jù),因為 HDFS 具有以下優(yōu)點:

1狂票、高容錯性
* 數(shù)據(jù)自動保存多個副本候齿。它通過增加副本的形式,提高容錯性。
* 某一個副本丟失以后慌盯,它可以自動恢復周霉,這是由 HDFS 內(nèi)部機制實現(xiàn)的,我們不必關(guān)心亚皂。
  2俱箱、適合批處理
* 它是通過移動計算而不是移動數(shù)據(jù)。
* 它會把數(shù)據(jù)位置暴露給計算框架灭必。
  3狞谱、適合大數(shù)據(jù)處理
* 處理數(shù)據(jù)達到 GB、TB禁漓、甚至PB級別的數(shù)據(jù)跟衅。
* 能夠處理百萬規(guī)模以上的文件數(shù)量,數(shù)量相當之大播歼。
* 能夠處理10K節(jié)點的規(guī)模与斤。
  4、流式文件訪問
* 一次寫入荚恶,多次讀取撩穿。文件一旦寫入不能修改,只能追加谒撼。
* 它能保證數(shù)據(jù)的一致性食寡。
  5、可構(gòu)建在廉價機器上
* 它通過多副本機制廓潜,提高可靠性抵皱。
* 它提供了容錯和恢復機制。比如某一個副本丟失辩蛋,可以通過其它副本來恢復呻畸。

當然 HDFS 也有它的劣勢,并不適合所有的場合:

1悼院、低延時數(shù)據(jù)訪問
* 比如毫秒級的來存儲數(shù)據(jù)伤为,這是不行的,它做不到据途。
* 它適合高吞吐率的場景绞愚,就是在某一時間內(nèi)寫入大量的數(shù)據(jù)。但是它在低延時的情況下是不行的颖医,比如毫秒級以內(nèi)讀取數(shù)據(jù)位衩,這樣它是很難做到的。
2熔萧、小文件存儲
* 存儲大量小文件(這里的小文件是指小于HDFS系統(tǒng)的Block大小的文件(默認64M))的話糖驴,它會占用 NameNode大量的內(nèi)存來存儲文件僚祷、目錄和塊信息。這樣是不可取的贮缕,因為NameNode的內(nèi)存總是有限的久妆。
* 小文件存儲的尋道時間會超過讀取時間,它違反了HDFS的設(shè)計目標跷睦。
3筷弦、并發(fā)寫入、文件隨機修改
* 一個文件只能有一個寫抑诸,不允許多個線程同時寫烂琴。
* 僅支持數(shù)據(jù) append(追加),不支持文件的隨機修改蜕乡。

HDFS 如何存儲數(shù)據(jù)

HDFS的架構(gòu)圖

HDFS 采用Master/Slave的架構(gòu)來存儲數(shù)據(jù)奸绷,這種架構(gòu)主要由四個部分組成,分別為HDFS Client层玲、NameNode号醉、DataNode和Secondary NameNode。下面我們分別介紹這四個組成部分

1辛块、Client:就是客戶端畔派。
* 文件切分。文件上傳 HDFS 的時候润绵,Client 將文件切分成 一個一個的Block线椰,然后進行存儲。
* 與 NameNode 交互尘盼,獲取文件的位置信息憨愉。
* 與 DataNode 交互,讀取或者寫入數(shù)據(jù)卿捎。
* Client 提供一些命令來管理 HDFS配紫,比如啟動或者關(guān)閉HDFS。
* Client 可以通過一些命令來訪問 HDFS午阵。
2躺孝、NameNode:就是 master,它是一個主管趟庄、管理者括细。
* 管理 HDFS 的名稱空間
* 管理數(shù)據(jù)塊(Block)映射信息
* 配置副本策略
* 處理客戶端讀寫請求。
3戚啥、DataNode:就是Slave。NameNode 下達命令锉试,DataNode 執(zhí)行實際的操作猫十。
* 存儲實際的數(shù)據(jù)塊。
* 執(zhí)行數(shù)據(jù)塊的讀/寫操作。
4拖云、Secondary NameNode:并非 NameNode 的熱備贷笛。當NameNode 掛掉的時候,它并不能馬上替換 NameNode 并提供服務(wù)宙项。
* 輔助 NameNode乏苦,分擔其工作量。
* 定期合并 fsimage和fsedits尤筐,并推送給NameNode汇荐。
* 在緊急情況下,可輔助恢復 NameNode盆繁。

HDFS 如何讀取文件

image

HDFS的文件讀取原理掀淘,主要包括以下幾個步驟:

  • 首先調(diào)用FileSystem對象的open方法,其實獲取的是一個DistributedFileSystem的實例油昂。
  • DistributedFileSystem通過RPC(遠程過程調(diào)用)獲得文件的第一批block的locations革娄,同一block按照重復數(shù)會返回多個locations,這些locations按照hadoop拓撲結(jié)構(gòu)排序冕碟,距離客戶端近的排在前面拦惋。
  • 前兩步會返回一個FSDataInputStream對象,該對象會被封裝成 DFSInputStream對象安寺,DFSInputStream可以方便的管理datanode和namenode數(shù)據(jù)流架忌。客戶端調(diào)用read方法我衬,DFSInputStream就會找出離客戶端最近的datanode并連接datanode叹放。
  • 數(shù)據(jù)從datanode源源不斷的流向客戶端。
  • 如果第一個block塊的數(shù)據(jù)讀完了挠羔,就會關(guān)閉指向第一個block塊的datanode連接井仰,接著讀取下一個block塊。這些操作對客戶端來說是透明的破加,從客戶端的角度來看只是讀一個持續(xù)不斷的流俱恶。
  • 如果第一批block都讀完了,DFSInputStream就會去namenode拿下一批blocks的location范舀,然后繼續(xù)讀合是,如果所有的block塊都讀完,這時就會關(guān)閉掉所有的流锭环。

HDFS 如何寫入文件

image

HDFS的文件寫入原理聪全,主要包括以下幾個步驟:

  • 客戶端通過調(diào)用 DistributedFileSystem 的create方法,創(chuàng)建一個新的文件辅辩。
  • DistributedFileSystem 通過 RPC(遠程過程調(diào)用)調(diào)用 NameNode难礼,去創(chuàng)建一個沒有blocks關(guān)聯(lián)的新文件娃圆。創(chuàng)建前,NameNode 會做各種校驗蛾茉,比如文件是否存在讼呢,客戶端有無權(quán)限去創(chuàng)建等。如果校驗通過谦炬,NameNode 就會記錄下新文件悦屏,否則就會拋出IO異常。
  • 前兩步結(jié)束后會返回 FSDataOutputStream 的對象键思,和讀文件的時候相似础爬,F(xiàn)SDataOutputStream 被封裝成 DFSOutputStream,DFSOutputStream 可以協(xié)調(diào) NameNode和 DataNode稚机∧环客戶端開始寫數(shù)據(jù)到DFSOutputStream,DFSOutputStream會把數(shù)據(jù)切成一個個小packet,然后排成隊列 data queue赖条。
  • DataStreamer 會去處理接受 data queue失乾,它先問詢 NameNode 這個新的 block 最適合存儲的在哪幾個DataNode里,比如重復數(shù)是3纬乍,那么就找到3個最適合的 DataNode碱茁,把它們排成一個 pipeline。DataStreamer 把 packet 按隊列輸出到管道的第一個 DataNode 中仿贬,第一個 DataNode又把 packet 輸出到第二個 DataNode 中纽竣,以此類推。
  • DFSOutputStream 還有一個隊列叫 ack queue茧泪,也是由 packet 組成蜓氨,等待DataNode的收到響應(yīng),當pipeline中的所有DataNode都表示已經(jīng)收到的時候队伟,這時akc queue才會把對應(yīng)的packet包移除掉穴吹。
  • 客戶端完成寫數(shù)據(jù)后,調(diào)用close方法關(guān)閉寫入流嗜侮。
  • DataStreamer 把剩余的包都刷到 pipeline 里港令,然后等待 ack 信息,收到最后一個 ack 后锈颗,通知 DataNode 把文件標示為已完成顷霹。

HDFS 副本存放策略

namenode如何選擇在哪個datanode 存儲副本(replication)?這里需要對可靠性击吱、寫入帶寬和讀取帶寬進行權(quán)衡淋淀。Hadoop對datanode存儲副本有自己的副本策略,在其發(fā)展過程中一共有兩個版本的副本策略姨拥,分別如下所示

image

hadoop2.x新特性

  • 引入了NameNode Federation绅喉,解決了橫向內(nèi)存擴展

  • 引入了Namenode HA渠鸽,解決了namenode單點故障

  • 引入了YARN叫乌,負責資源管理和調(diào)度

  • 增加了ResourceManager HA解決了ResourceManager單點故障
    1柴罐、NameNode Federation

    架構(gòu)如下圖

    image
  • 存在多個NameNode,每個NameNode分管一部分目錄

  • NameNode共用DataNode

這樣做的好處就是當NN內(nèi)存受限時憨奸,能擴展內(nèi)存革屠,解決內(nèi)存擴展問題,而且每個NN獨立工作相互不受影響排宰,比如其中一個NN掛掉啦似芝,它不會影響其他NN提供服務(wù),但我們需要注意的是板甘,雖然有多個NN党瓮,分管不同的目錄,但是對于特定的NN盐类,依然存在單點故障寞奸,因為沒有它沒有熱備,解決單點故障使用NameNode HA

2在跳、NameNode HA

解決方案:

  • 基于NFS共享存儲解決方案
  • 基于Qurom Journal Manager(QJM)解決方案

1枪萄、基于NFS方案
Active NN與Standby NN通過NFS實現(xiàn)共享數(shù)據(jù),但如果Active NN與NFS之間或Standby NN與NFS之間猫妙,其中一處有網(wǎng)絡(luò)故障的話瓷翻,那就會造成數(shù)據(jù)同步問題
2、基于QJM方案
架構(gòu)如下圖


image

Active NN割坠、Standby NN有主備之分齐帚,NN Active是主的,NN Standby備用的
集群啟動之后彼哼,一個namenode是active狀態(tài)对妄,來處理client與datanode之間的請求,并把相應(yīng)的日志文件寫到本地中或JN中沪羔;
Active NN與Standby NN之間是通過一組JN共享數(shù)據(jù)(JN一般為奇數(shù)個饥伊,ZK一般也為奇數(shù)個),Active NN會把日志文件蔫饰、鏡像文件寫到JN中去琅豆,只要JN中有一半寫成功,那就表明Active NN向JN中寫成功啦篓吁,Standby NN就開始從JN中讀取數(shù)據(jù)茫因,來實現(xiàn)與Active NN數(shù)據(jù)同步,這種方式支持容錯杖剪,因為Standby NN在啟動的時候冻押,會加載鏡像文件(fsimage)并周期性的從JN中獲取日志文件來保持與Active NN同步
為了實現(xiàn)Standby NN在Active NN掛掉之后驰贷,能迅速的再提供服務(wù),需要DN不僅需要向Active NN匯報洛巢,同時還要向Standby NN匯報括袒,這樣就使得Standby NN能保存數(shù)據(jù)塊在DN上的位置信息,因為在NameNode在啟動過程中最費時工作稿茉,就是處理所有DN上的數(shù)據(jù)塊的信息
為了實現(xiàn)Active NN高熱備锹锰,增加了FailoverController和ZK,F(xiàn)ailoverController通過Heartbeat的方式與ZK通信漓库,通過ZK來選舉恃慧,一旦Active NN掛掉,就選取另一個FailoverController作為active狀態(tài)渺蒿,然后FailoverController通過rpc痢士,讓standby NN轉(zhuǎn)變?yōu)锳ctive NN
FailoverController一方面監(jiān)控NN的狀態(tài)信息,一方面還向ZK定時發(fā)送心跳茂装,使自己被選舉怠蹂。當自己被選為主(Active)的時候,就會通過rpc使相應(yīng)NN轉(zhuǎn)變Active狀態(tài)

3训唱、結(jié)合HDFS2的新特性褥蚯,在實際生成環(huán)境中部署圖

image

這里有12個DN,有4個NN,NN-1與NN-2是主備關(guān)系况增,它們管理/share目錄赞庶;NN-3與NN-4是主備關(guān)系,它們管理/user目錄

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末澳骤,一起剝皮案震驚了整個濱河市歧强,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌为肮,老刑警劉巖摊册,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異颊艳,居然都是意外死亡茅特,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門棋枕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來白修,“玉大人,你說我怎么就攤上這事重斑”Γ” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長祖很。 經(jīng)常有香客問我笛丙,道長,這世上最難降的妖魔是什么假颇? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任胚鸯,我火速辦了婚禮,結(jié)果婚禮上拆融,老公的妹妹穿的比我還像新娘蠢琳。我一直安慰自己啊终,他們只是感情好镜豹,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蓝牲,像睡著了一般趟脂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上例衍,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天昔期,我揣著相機與錄音,去河邊找鬼佛玄。 笑死硼一,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的梦抢。 我是一名探鬼主播般贼,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼哼蛆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起灭抑,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤禀倔,失蹤者是張志新(化名)和其女友劉穎救湖,沒想到半個月后力九,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡靶衍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片眷蜈。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡忌怎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情狂鞋,我是刑警寧澤啰挪,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布抽活,位于F島的核電站,受9級特大地震影響政己,放射性物質(zhì)發(fā)生泄漏酌壕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一歇由、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧果港,春花似錦沦泌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至萝衩,卻和暖如春回挽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背猩谊。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工千劈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人牌捷。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓墙牌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親暗甥。 傳聞我的和親對象是個殘疾皇子喜滨,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

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

  • 參考:初步掌握HDFS的架構(gòu)及原理 1 HDFS 是做什么的 HDFS(Hadoop Distributed Fi...
    小小少年Boy閱讀 401評論 0 2
  • HDFS是Hadoop Distribute File System 的簡稱,也就是Hadoop的一個分布式文件系...
    大佛愛讀書閱讀 859評論 0 0
  • 1.背景 HDFS最初是參考谷歌GFS論文原理開發(fā)的一個開源產(chǎn)品撤防,由Lucene開源項目的創(chuàng)始人Doug Cutt...
    架構(gòu)禪話閱讀 1,371評論 0 2
  • “沒有什么困難是過不去的虽风,不開心的時候,就想點開心的事」枷ィ”
    好人BENSONLI閱讀 128評論 0 0
  • “師父陌凳,此子害人無數(shù),何不了解了他的性命内舟,以免他在危害人間呀合敦!”一個二十多歲的青年看著面前發(fā)須皆白的老道人...
    安未思閱讀 512評論 1 1