HDFS學(xué)習(xí)之Yarn

開始學(xué)習(xí)Hadoop了慎冤,其中很重要的一塊就是它的存儲(chǔ)系統(tǒng)-HDFS睡腿,先學(xué)學(xué)HDFS

HDFS概述

HDFS源于Google發(fā)表于2003年10月的GFS論文服赎,為GFS的克隆版型宝,HDFS是 Hadoop Distributed File System的簡寫, 它是一個(gè)易于擴(kuò)展的分布式文件系統(tǒng),運(yùn)行在大量普通廉價(jià)機(jī)器上坛梁,成本較低,并且通過多副本方式提供較好的容錯(cuò)能力

優(yōu)點(diǎn)

HDFS的優(yōu)點(diǎn)有很多腊凶,簡單介紹:

高容錯(cuò): 系統(tǒng)的數(shù)據(jù)自動(dòng)保存多個(gè)副本划咐, 在副本丟失后,可以自動(dòng)恢復(fù)

適合大數(shù)據(jù)批處理:系統(tǒng)通過API將數(shù)據(jù)位置暴露給計(jì)算框架钧萍,通過移動(dòng)計(jì)算不移動(dòng)數(shù)據(jù)的方式來處理大數(shù)據(jù)量的計(jì)算褐缠,可以存儲(chǔ)GB、TB甚至PB級(jí)別的數(shù)據(jù)风瘦,文件數(shù)量可達(dá)到百萬規(guī)模及以上队魏,目前實(shí)用的案例有超過上萬臺(tái)節(jié)點(diǎn)的部署

流式文件訪問:系統(tǒng)數(shù)據(jù)支持一次寫入,多次讀取万搔,并不支持隨機(jī)修改胡桨,通過多副本的方式來保證數(shù)據(jù)的一致性和完整性。

構(gòu)建成本低瞬雹,安全可靠 :系統(tǒng)部署在廉價(jià)的商用機(jī)器上昧谊,設(shè)備成本低,通過多副本的方式提高了系統(tǒng)的可靠性酗捌,并提供容錯(cuò)和恢復(fù)機(jī)制呢诬。

缺點(diǎn)

不適合低延遲數(shù)據(jù)訪問:系統(tǒng)以數(shù)據(jù)塊存儲(chǔ),通過犧牲訪問速度來換取高吞吐率胖缤,不適合對(duì)存取速度要求較高的場景尚镰。

不適合大量小文件存儲(chǔ):系統(tǒng)NameNode會(huì)存儲(chǔ)文件元數(shù)據(jù),小文件太多內(nèi)存占用過大哪廓,導(dǎo)致NameNode不可用狗唉,且小文件過多在讀取時(shí)會(huì)占用大量的尋道時(shí)間,讀取時(shí)間和尋道時(shí)間的比例不太好撩独。

不適合并發(fā)寫入:系統(tǒng)的一個(gè)文件只能有一個(gè)寫入者敞曹,不適合并發(fā)場景的寫入

不提供文件隨機(jī)修改:系統(tǒng)只支持追加數(shù)據(jù),不提供隨機(jī)修改操作

基本架構(gòu)與原理


HDFS架構(gòu)

HDFS以NameNode管理命名空間综膀,維護(hù)文件存儲(chǔ)的元數(shù)據(jù)信息澳迫,將存儲(chǔ)的數(shù)據(jù)按照固定大小切分成多塊,分別存儲(chǔ)多份數(shù)據(jù)剧劝,存放在不同的節(jié)點(diǎn)橄登, 通過Standby NameNode實(shí)現(xiàn)高可用,保證系統(tǒng)在Active NameNode掛掉的情況下還能夠?qū)ν馓峁┓?wù)讥此,以DataNode來存儲(chǔ)具體數(shù)據(jù)拢锹,DataNode通過心跳機(jī)制來向NameNode報(bào)告節(jié)點(diǎn)運(yùn)行狀態(tài)及存儲(chǔ)的數(shù)據(jù)等信息,HDFS默認(rèn)存儲(chǔ)的副本為3萄喳,如果因?yàn)楣?jié)點(diǎn)掛掉導(dǎo)致副本數(shù)量不足卒稳,系統(tǒng)會(huì)再復(fù)制數(shù)據(jù)來保證最低副本數(shù)。

概念

ActiveNameNode

系統(tǒng)的主節(jié)點(diǎn)他巨,只有一個(gè)充坑,主要作用是管理HDFS文件系統(tǒng)的命名空間,維護(hù)文件元數(shù)據(jù)信息染突,管理HDFS的副本策略捻爷,處理客戶端的讀寫請(qǐng)求


HDFS讀寫


客戶端在向HDFS發(fā)送寫請(qǐng)求時(shí),NameNode首先將操作信息寫入edit日志份企,然后對(duì)數(shù)據(jù)進(jìn)行分塊也榄,向DataNode發(fā)送寫請(qǐng)求,在DataNode寫入大部分?jǐn)?shù)據(jù)(一半以上)司志,NameNode將元數(shù)據(jù)寫入內(nèi)存甜紫,fsimage定期將內(nèi)存內(nèi)容及edit日志同步并固化到磁盤(此過程理解不全,有疏漏敬請(qǐng)指正)

Standby NameNode

Active NameNode的熱備節(jié)點(diǎn)俐芯,它會(huì)周期性同步edits的編輯日志棵介,定期合并fsimage和eidts到本地磁盤,當(dāng)Active NameNode出現(xiàn)故障時(shí)吧史,集群可以幾乎無縫切換到Standby NameNode

NameNode元數(shù)據(jù)文件

NameNode元數(shù)據(jù)文件包括edits和fsimage邮辽,edits保存客戶端對(duì)文件的寫操作記錄,包括創(chuàng)建文件贸营、刪除文件吨述,fsimage為文件系統(tǒng)元數(shù)據(jù)的檢查點(diǎn)鏡像文件,保存了文件系統(tǒng)中的所有目錄和文件信息钞脂,如目錄結(jié)構(gòu)揣云、文件副本數(shù)、文件的塊信息等冰啃,NameNode中的內(nèi)存中保存著最新的鏡像信息邓夕,鏡像內(nèi)容為fsimage + edits刘莹,NameNode會(huì)定期將內(nèi)存中的數(shù)據(jù)增量備份到磁盤中

DataNode

slave的工作節(jié)點(diǎn),一般啟動(dòng)多個(gè)焚刚,可以靈活擴(kuò)展

存儲(chǔ)數(shù)據(jù)塊和數(shù)據(jù)校驗(yàn)和(對(duì)數(shù)據(jù)內(nèi)容進(jìn)行校驗(yàn)点弯,看數(shù)據(jù)內(nèi)容是否完整)

通過心跳機(jī)制定期向NameNode匯報(bào)運(yùn)行狀態(tài)和所有塊的列表信息

在集群啟動(dòng)時(shí)DataNode向NameNode提供存儲(chǔ)的Block塊的列表信息

Block數(shù)據(jù)塊

文件寫入HDFS會(huì)被切分成固定大小的Block塊

數(shù)據(jù)塊的大小固定,Hadoop2.0默認(rèn)128M矿咕,1.0默認(rèn)64MB抢肛,可自定義修改

Block數(shù)據(jù)塊是HDFS的最小存儲(chǔ)單元,定義的數(shù)據(jù)塊大小為數(shù)據(jù)切分的最大大小碳柱,如果大小不夠捡絮,以實(shí)際的來

默認(rèn)每個(gè)Block有三個(gè)副本

Client

客戶端,主要作用為文件切分莲镣,與NameNode交互獲取文件元數(shù)據(jù)信息福稳,與DataNode交互,讀取或?qū)懭霐?shù)據(jù)瑞侮,管理HDFS

HDFS為什么不適合存儲(chǔ)小文件

HDFS元數(shù)據(jù)信息存儲(chǔ)在NameNode的內(nèi)存中灵寺,內(nèi)存大小再大也有限制

NameNode存儲(chǔ)的Block數(shù)量有限(一個(gè)block元信息消耗大約150byte內(nèi)存,小文件過多区岗,占用的內(nèi)存太大略板,存的數(shù)據(jù)卻沒有多少,性價(jià)比不高)

存儲(chǔ)大量的小文件浪費(fèi)大量的磁盤尋道時(shí)間

HDFS的高可用


HDFS高可用

在Hadoop系統(tǒng)中慈缔,如果NameNode故障叮称,由于集群數(shù)據(jù)量大,重啟需要的時(shí)間將會(huì)很長藐鹤,HDFS使用Standby NameNode來解決這樣的問題瓤檐,主要的實(shí)現(xiàn)路徑有兩條,一條為NameNode的數(shù)據(jù)共享娱节,另外一條為NameNode故障時(shí)的主備切換

數(shù)據(jù)共享:

DataNode通過多副本的形式進(jìn)行數(shù)據(jù)備份挠蛉,NameNode則使用了Standby NameNode,在客戶端寫數(shù)據(jù)時(shí)肄满,Active NameNode除了寫edits谴古,也會(huì)同步阻塞寫JournalNode的eidt日志,只有大部分(二分之一)JournalNode的edit日志寫入成功稠歉,才會(huì)修改內(nèi)存中的數(shù)據(jù)信息掰担,之后數(shù)據(jù)才會(huì)修改。(JournalNode為一組輕量的NameNode和Standby NameNode進(jìn)行通信的進(jìn)程怒炸,它們組成了一套QIM共享存儲(chǔ)系統(tǒng),只負(fù)責(zé)存儲(chǔ)edit日志),Standby NameNode定期與JournalNode進(jìn)行同步更新內(nèi)存數(shù)據(jù)带饱,Active NameNode 和Standby NameNode都會(huì)定期將數(shù)據(jù)固化到fsimage中

主備切換:

準(zhǔn)備切換由DFSZKFailoverController(以下簡稱ZKFC)來控制,每個(gè)NameNode都有一個(gè)ZKFC進(jìn)程阅羹,ZKFC會(huì)同時(shí)構(gòu)建HealthMonitor和ActiveStandbyElector勺疼,HealthMonotor會(huì)通過RPC定期檢查NameNode的健康狀況教寂。

集群啟動(dòng)時(shí),ActiveStandbyElector都會(huì)主動(dòng)在Zookeeper創(chuàng)建臨時(shí)鎖節(jié)點(diǎn)执庐,寫入成功的NameNode即為Active孝宗,另外為Standby的,在運(yùn)行時(shí)Active NameNode發(fā)生故障/網(wǎng)絡(luò)延遲時(shí)耕肩,Zookeeper臨時(shí)節(jié)點(diǎn)刪除,Standby NameNode會(huì)嘗試創(chuàng)建臨時(shí)節(jié)點(diǎn)问潭,如果創(chuàng)建成功猿诸,則Standby NameNode會(huì)變成Active NameNode。另外狡忙,如果HealthMonitor監(jiān)測到Active NameNode機(jī)器故障梳虽,則通知ActiveStandbyElector進(jìn)行選舉,故障節(jié)點(diǎn)不參與選舉灾茁,主備會(huì)進(jìn)行切換Standby NameNode創(chuàng)建臨時(shí)節(jié)點(diǎn)

腦裂:Active NameNode會(huì)因?yàn)槠渌颍ㄈ缇W(wǎng)絡(luò)阻塞窜觉、Full GC)而與Zookeeper的會(huì)話超時(shí),導(dǎo)致假死北专,此時(shí)Standby NameNode切換為Active NameNode禀挫,但另外的Active NameNode恢復(fù)后也為Active NameNode這樣造成雙主現(xiàn)象,稱為腦裂拓颓。Hadoop會(huì)通過fencing機(jī)制语婴,首先會(huì)通過ssh把Active NameNode切換為Standby NameNode,如果失敗驶睦,則會(huì)強(qiáng)行將進(jìn)程kill砰左,如果再失敗,可配置bash腳本將服務(wù)器強(qiáng)行關(guān)機(jī)场航。

以上為HDFS的一些學(xué)習(xí)筆記缠导,如有遺漏,歡迎指正溉痢。

Yarn

Yarn是Yet Another Resource Negotiator的簡稱僻造,從Hadoop2.0開始引入的一個(gè)資源調(diào)度系統(tǒng),為了解決多框架下的資源及硬件的管理孩饼。

Yarn主要提供了資源管理嫡意,統(tǒng)一管理和調(diào)度集群資源,負(fù)責(zé)與客戶端交互捣辆,處理客戶端的請(qǐng)求蔬螟。

基本架構(gòu)

Yarn采用典型的Master-Slave架構(gòu),Master即ResourceManager汽畴,Slave即NodeManager旧巾,ResourceManager負(fù)責(zé)全局資源管理和調(diào)度耸序,NodeManager負(fù)責(zé)本機(jī)的資源管理,ResourceManager一般與DataNode一一對(duì)應(yīng)鲁猩,ResourceManager通過心跳定期與ResourceManager進(jìn)行通信坎怪,匯報(bào)機(jī)器的資源使用情況,ResourceManager在接收到作業(yè)請(qǐng)求后廓握,通過調(diào)度器分配一個(gè)Container(運(yùn)行任務(wù)所必需的資源的一個(gè)抽象容器)搅窿,然后協(xié)調(diào)NodeManager,分配到具體的NodeManager隙券,NodeManager啟動(dòng)一個(gè)ApplicationMaster男应,ApplicationMaster與ResourceManager通信申請(qǐng)資源,ResourceManager分配給ApplicationMaster資源娱仔,ResourceManager調(diào)度NodeManager資源進(jìn)行相應(yīng)的任務(wù)執(zhí)行沐飘,在任務(wù)執(zhí)行的過程中ApplicationMaster與ResourceManager進(jìn)行通信,匯報(bào)任務(wù)執(zhí)行情況牲迫,如果任務(wù)執(zhí)行失敗耐朴,會(huì)調(diào)度到其他機(jī)器進(jìn)行再次執(zhí)行。

為了集群高可用盹憎,ResourceManager也會(huì)啟動(dòng)一個(gè)備用的ResourceManager筛峭,它們基于Zookeeper實(shí)現(xiàn)高可用


Yarn基本架構(gòu)


核心組件

ResourceManager

整個(gè)集群只有一個(gè),主要用來處理客戶端請(qǐng)求陪每,啟動(dòng)/監(jiān)控ApplicationMaster蜒滩,監(jiān)控NodeManager,對(duì)資源進(jìn)行分配和調(diào)度

NodeManager

每個(gè)節(jié)點(diǎn)只有一個(gè)奶稠,集群中一般與DataNode一一對(duì)應(yīng)俯艰,在相同的機(jī)器上進(jìn)行部署,主要功能:單個(gè)節(jié)點(diǎn)的資源監(jiān)控和管理锌订;定時(shí)向ResourceManager匯報(bào)本機(jī)的資源使用情況竹握;處理ResourceManager的請(qǐng)求,為作業(yè)的執(zhí)行分配Container辆飘;處理來自ApplicationMaster的請(qǐng)求啦辐,啟動(dòng)和停止Container

ApplicationMaster

每個(gè)應(yīng)用程序只有一個(gè),負(fù)責(zé)應(yīng)用程序的管理蜈项,資源的申請(qǐng)和任務(wù)調(diào)度芹关,主要功能:與ResourceManager協(xié)商為應(yīng)用程序申請(qǐng)資源;與NodeManager通信啟動(dòng)/停止任務(wù)紧卒;監(jiān)控任務(wù)的運(yùn)行狀態(tài)和失敗處理

Container

任務(wù)運(yùn)行環(huán)境的抽象侥衬,只有在分配任務(wù)的時(shí)候才會(huì)抽象出一個(gè)Container,主要功能:描述一系列信息(任務(wù)運(yùn)行資源如節(jié)點(diǎn)、CPU轴总、內(nèi)存等)直颅;管理任務(wù)的啟停及任務(wù)的運(yùn)行環(huán)境

Yarn容錯(cuò)

Resource基于Zookeeper實(shí)現(xiàn)高可用

NodeManager故障會(huì)導(dǎo)致運(yùn)行在該節(jié)點(diǎn)運(yùn)行的任務(wù)失敗,任務(wù)失敗后怀樟,ResourceManager將失敗任務(wù)通知對(duì)應(yīng)的ApplicationMaster功偿,ApplicationMaster決定如何處理失敗的任務(wù)

ApplicationMaster失敗后,由ResourceManager負(fù)責(zé)重啟往堡,RMApplicationMaster會(huì)保存已經(jīng)運(yùn)行完成的Task,重啟后不需要重新運(yùn)行械荷。

補(bǔ)充:在超大規(guī)模的集群中,可以使用namenode federation來配置多個(gè)命名空間虑灰,但一般來說是不會(huì)用到的吨瞎,除了向百度,google這樣數(shù)據(jù)量超多的公司

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瘩缆,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子佃蚜,更是在濱河造成了極大的恐慌庸娱,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,294評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谐算,死亡現(xiàn)場離奇詭異熟尉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)洲脂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,493評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門斤儿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人恐锦,你說我怎么就攤上這事往果。” “怎么了一铅?”我有些...
    開封第一講書人閱讀 157,790評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵陕贮,是天一觀的道長。 經(jīng)常有香客問我潘飘,道長肮之,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,595評(píng)論 1 284
  • 正文 為了忘掉前任卜录,我火速辦了婚禮戈擒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘艰毒。我一直安慰自己筐高,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,718評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著凯傲,像睡著了一般犬辰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上冰单,一...
    開封第一講書人閱讀 49,906評(píng)論 1 290
  • 那天幌缝,我揣著相機(jī)與錄音,去河邊找鬼诫欠。 笑死涵卵,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的荒叼。 我是一名探鬼主播轿偎,決...
    沈念sama閱讀 39,053評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼被廓!你這毒婦竟也來了坏晦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,797評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤嫁乘,失蹤者是張志新(化名)和其女友劉穎昆婿,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蜓斧,經(jīng)...
    沈念sama閱讀 44,250評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡仓蛆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,570評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了挎春。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片看疙。...
    茶點(diǎn)故事閱讀 38,711評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖直奋,靈堂內(nèi)的尸體忽然破棺而出能庆,到底是詐尸還是另有隱情,我是刑警寧澤脚线,帶...
    沈念sama閱讀 34,388評(píng)論 4 332
  • 正文 年R本政府宣布相味,位于F島的核電站,受9級(jí)特大地震影響殉挽,放射性物質(zhì)發(fā)生泄漏丰涉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,018評(píng)論 3 316
  • 文/蒙蒙 一斯碌、第九天 我趴在偏房一處隱蔽的房頂上張望一死。 院中可真熱鬧,春花似錦傻唾、人聲如沸投慈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,796評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽伪煤。三九已至加袋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間抱既,已是汗流浹背职烧。 一陣腳步聲響...
    開封第一講書人閱讀 32,023評(píng)論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留防泵,地道東北人蚀之。 一個(gè)月前我還...
    沈念sama閱讀 46,461評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像捷泞,于是被迫代替她去往敵國和親足删。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,595評(píng)論 2 350