【讀書筆記】《大數(shù)據(jù)技術(shù)體系詳解:原理、架構(gòu)與實(shí)踐》03.分布式文件系統(tǒng)

在大數(shù)據(jù)場(chǎng)景中销凑,大量數(shù)據(jù)是以文件形式保存的丛晌,典型代表是行為日志數(shù)據(jù)(用戶搜索日志、購(gòu)買日志闻鉴、點(diǎn)擊日志,以及機(jī)器操作日志等)茂洒。
這些文件形式的數(shù)據(jù)具有價(jià)值高孟岛、數(shù)據(jù)大、流式產(chǎn)生等特點(diǎn)督勺,需要一個(gè)分布式文件系統(tǒng)存儲(chǔ)它們渠羞,該文件系統(tǒng)應(yīng)具有良好的容錯(cuò)性、擴(kuò)展性和易用的API智哀,而HDFS(Hadoop Distributed File System)便是一個(gè)較為理想的解決方案次询。

HDFS

HDFS是一種塊級(jí)別的分布式文件系統(tǒng)。
塊級(jí)別的分布式文件系統(tǒng)系統(tǒng)核心思想是將文件分成等大的數(shù)據(jù)塊瓷叫,并以數(shù)據(jù)塊為單位存儲(chǔ)到不同節(jié)點(diǎn)上屯吊,進(jìn)而解決文件級(jí)別的分布式系統(tǒng)存在的負(fù)載均衡和并行處理問(wèn)題。
HDFS采用了主從架構(gòu)摹菠,如下圖所示:
主節(jié)點(diǎn)被稱為NameNode盒卸,只有一個(gè),管理元信息和所有從節(jié)點(diǎn)次氨;
從節(jié)點(diǎn)稱為DataNode蔽介,通常存在多個(gè),存儲(chǔ)實(shí)際的數(shù)據(jù)塊煮寡。
HDFS是一種塊級(jí)別的分布式文件系統(tǒng)虹蓄。
塊級(jí)別的分布式文件系統(tǒng)系統(tǒng)核心思想是將文件分成等大的數(shù)據(jù)塊,并以數(shù)據(jù)塊為單位存儲(chǔ)到不同節(jié)點(diǎn)上幸撕,進(jìn)而解決文件級(jí)別的分布式系統(tǒng)存在的負(fù)載均衡和并行處理問(wèn)題薇组。

HDFS采用了主從架構(gòu),如下圖所示:
主節(jié)點(diǎn)被稱為NameNode坐儿,只有一個(gè)体箕,管理元信息和所有從節(jié)點(diǎn)专钉;
從節(jié)點(diǎn)稱為DataNode,通常存在多個(gè)累铅,存儲(chǔ)實(shí)際的數(shù)據(jù)塊跃须。


HDFS基本架構(gòu).png

1. NameNode

NameNode是HDFS集群管理者,負(fù)責(zé)管理文件系統(tǒng)元信息和所有DataNode娃兽。
1.管理元信息:NameNode維護(hù)著整個(gè)文件系統(tǒng)的目錄樹菇民,各個(gè)文件的數(shù)據(jù)塊信息等。
2.管理DataNode:DataNode周期性向NameNode匯報(bào)心跳以表明自己活著投储,一旦NameNode發(fā)現(xiàn)某個(gè)DataNode出現(xiàn)故障第练,會(huì)在其他存活DataNode上重構(gòu)丟失的數(shù)據(jù)塊。

一個(gè)HDFS集群中只存在一個(gè)對(duì)外服務(wù)的NameNode玛荞,稱為Active NameNode娇掏,
為了防止單個(gè)NameNode出現(xiàn)故障后導(dǎo)致整個(gè)集群不可用,用戶可啟動(dòng)一個(gè)備用NameNode勋眯,稱為Standby NameNode婴梧,為了實(shí)現(xiàn)NameNode HA(High Availability,高可用)客蹋,需解決好兩者的切換和狀態(tài)同步問(wèn)題塞蹭。
1.主/備切換:HDFS提供了手動(dòng)方式和自動(dòng)方式完成主備NameNode切換。
1)手動(dòng)方式是通過(guò)命令顯式修改NameNode角色完成的讶坯,通常用于NameNode滾動(dòng)升級(jí)(滾動(dòng)發(fā)布:一般是取出一個(gè)或者多個(gè)服務(wù)器停止服務(wù)番电,執(zhí)行更新,并重新將其投入使用辆琅。周而復(fù)始漱办,直到集群中所有的實(shí)例都更新成新版本);
2)自動(dòng)模式是通過(guò)ZooKeeper實(shí)現(xiàn)的婉烟,可在主NameNode不可用時(shí)洼冻,自動(dòng)將備用NameNode提升為主NameNode,以保證HDFS不間斷對(duì)外提供服務(wù)隅很。
2.狀態(tài)同步:主/備NameNode并不是通過(guò)強(qiáng)一致協(xié)議保證狀態(tài)一致的撞牢,而是通過(guò)第三方的共享存儲(chǔ)系統(tǒng)。
1)主NameNode將EditLog(修改日志叔营,比如創(chuàng)建和修改文件)寫入共享存儲(chǔ)系統(tǒng)屋彪,備用NameNode則從共享存儲(chǔ)系統(tǒng)中讀取這些修改日志,并重新執(zhí)行這些操作绒尊,以保證與主NameNode的內(nèi)存信息一致畜挥。
2)目前HDFS支持兩種共享存儲(chǔ)系統(tǒng):NFS(Network File System)和QJM(Quorum Journal Manager)QJM能夠構(gòu)建在普通商用機(jī)器之上,比NFS更加廉價(jià)婴谱,因此受眾更廣蟹但。

2. DataNode

DataNode存儲(chǔ)實(shí)際的數(shù)據(jù)塊躯泰,并周期性通過(guò)心跳向NameNode匯報(bào)自己的狀態(tài)信息。

3. Client

用戶通過(guò)客戶端與NameNode和DataNode交互华糖,完成HDFS管理(比如服務(wù)啟動(dòng)與停止)和數(shù)據(jù)讀寫等操作麦向。
此外,文件的分塊操作也是在客戶端完成的客叉。當(dāng)向HDFS寫入文件時(shí)诵竭,客戶端首先將文件切分成等大的數(shù)據(jù)塊(默認(rèn)一個(gè)數(shù)據(jù)塊大小為128MB),之后從NameNode上領(lǐng)取三個(gè)DataNode地址兼搏,并在它們之間建立數(shù)據(jù)流水線卵慰,進(jìn)而將數(shù)據(jù)塊流式寫入這些節(jié)點(diǎn)。

隨著數(shù)據(jù)塊和訪問(wèn)量的增加佛呻,單個(gè)NameNode會(huì)成為制約HDFS擴(kuò)展性的瓶頸裳朋,為了解決該問(wèn)題,HDFS提供了NameNode Federation機(jī)制吓著,允許一個(gè)集群中存在多個(gè)對(duì)外服務(wù)的NameNode鲤嫡,它們各自管理目錄樹的一部分(對(duì)目錄水平分片),如圖6-4所示夜矗。需要注意的是泛范,在NameNode Federation中让虐,每個(gè)主NameNode均存在單點(diǎn)故障問(wèn)題紊撕,需為之分配一個(gè)備用NameNode。


啟用NameNode Federation的HDFS架構(gòu).png

HDFS關(guān)鍵技術(shù)

1.容錯(cuò)性設(shè)計(jì)

? NameNode故障:NameNode內(nèi)存中記錄了文件系統(tǒng)的元信息赡突,這些元信息一旦丟失对扶,將導(dǎo)致整個(gè)文件系統(tǒng)數(shù)據(jù)不可用。HDFS允許為每個(gè)Active NameNode分配一個(gè)Standby NameNode惭缰,以防止單個(gè)NameNode宕機(jī)后導(dǎo)致元信息丟失和整個(gè)集群不可訪問(wèn)浪南。
? DataNode故障:每個(gè)DataNode保存了實(shí)際的數(shù)據(jù)塊,這些數(shù)據(jù)塊在其他DataNode上存在相同的副本漱受。DataNode能通過(guò)心跳機(jī)制向NameNode匯報(bào)狀態(tài)信息络凿,當(dāng)某個(gè)DataNode宕機(jī)后,NameNode可在其他節(jié)點(diǎn)上重構(gòu)該DataNode上的數(shù)據(jù)塊昂羡,以保證每個(gè)文件的副本數(shù)在正常水平線上絮记。
? 數(shù)據(jù)塊損壞:DataNode保存數(shù)據(jù)塊時(shí),會(huì)同時(shí)生成一個(gè)校驗(yàn)碼虐先。當(dāng)存取數(shù)據(jù)塊時(shí)怨愤,如果發(fā)現(xiàn)校驗(yàn)碼不一致,則認(rèn)為該數(shù)據(jù)塊已經(jīng)損壞蛹批,NameNode會(huì)通過(guò)其他節(jié)點(diǎn)上的正常副本重構(gòu)受損的數(shù)據(jù)塊撰洗。

2.副本放置策略

? 客戶端與DataNode同節(jié)點(diǎn)篮愉。這是一種常見的場(chǎng)景:上層計(jì)算框架處理HDFS數(shù)據(jù)時(shí),每個(gè)任務(wù)實(shí)際上就是一個(gè)客戶端差导,它們運(yùn)行在與DataNode相同的計(jì)算節(jié)點(diǎn)上(HDFS和YARN同節(jié)點(diǎn)部署)试躏。在這種情況下,三副本放置策略如下:第一個(gè)副本寫到同節(jié)點(diǎn)的DataNode上柿汛,另外兩個(gè)副本寫到另一個(gè)相同機(jī)架的不同DataNode上冗酿;
? 客戶端與DataNode不同節(jié)點(diǎn)。當(dāng)HDFS之外的應(yīng)用程序向HDFS寫數(shù)據(jù)時(shí)络断,通常會(huì)出現(xiàn)這種情況裁替,典型的場(chǎng)景有Flume Sink,用戶通過(guò)獨(dú)立客戶端shell命令行將文件上傳到HDFS等貌笨。在這種情況下弱判,HDFS會(huì)隨機(jī)選擇一個(gè)DataNode作為第一個(gè)副本放置節(jié)點(diǎn),其他兩個(gè)副本寫到另一個(gè)相同機(jī)架的不同DataNode上锥惋。


HDFS副本放置策略.png

3.異構(gòu)存儲(chǔ)介質(zhì)

HDFS支持多種常用存儲(chǔ)類型昌腰。異構(gòu)存儲(chǔ)介質(zhì)的引入,使得HDFS變成了一個(gè)提供混合存儲(chǔ)方式的文件系統(tǒng)膀跌,用戶可以根據(jù)數(shù)據(jù)特點(diǎn)遭商,選擇合適的存儲(chǔ)介質(zhì)滿足你應(yīng)用需求。
? ARCHIVE:高存儲(chǔ)密度但耗電較少的存儲(chǔ)介質(zhì)捅伤,通常用來(lái)存儲(chǔ)冷數(shù)據(jù)劫流。
? DISK:磁盤介質(zhì),這是HDFS默認(rèn)的存儲(chǔ)介質(zhì)丛忆。
? SSD:固態(tài)硬盤祠汇,是一種新型存儲(chǔ)介質(zhì),目前被不少互聯(lián)網(wǎng)公司使用熄诡。
? RAM_DISK:數(shù)據(jù)被寫入內(nèi)存中可很,同時(shí)會(huì)往該存儲(chǔ)介質(zhì)中再(異步)寫一份。


HDFS異構(gòu)存儲(chǔ)介質(zhì)示意圖.png

4. 集中式緩存管理

HDFS允許用戶將一部分目錄或文件緩存在off-heap內(nèi)存中凰浮,以加速對(duì)這些數(shù)據(jù)的訪問(wèn)效率我抠,該機(jī)制被稱為集中式緩存管理。
HDFS提供了API和命令行兩種方式袜茧,讓用戶管理集中式緩存系統(tǒng)中的文件和目錄菜拓,用戶可以根據(jù)需要將一個(gè)文件增加到緩存中,或從緩存中移除惫周。

數(shù)據(jù)收集組件

1. Flume

Flume提供了HDFS Sink尘惧,能夠?qū)⑹占降臄?shù)據(jù)直接寫入HDFS中,且自帶了靈活的配置參數(shù)递递、支持壓縮喷橙、按時(shí)或按大小切分文件等啥么。

2. Sqoop

Sqoop允許用戶指定數(shù)據(jù)寫入HDFS的目錄、文件格式(支持Text和SequenceFile兩種格式)贰逾、壓縮方式(支持LZO, Snappy等主流壓縮編碼)等悬荣。

SequenceFile:Hadoop用來(lái)存儲(chǔ)二進(jìn)制形式的[Key,Value]對(duì)而設(shè)計(jì)的一種平面文件(Flat file)。

小結(jié)

HDFS是一個(gè)分布式文件系統(tǒng)疙剑,具有良好的擴(kuò)展性氯迂、容錯(cuò)性以及易用的API。

它的核心思想是將文件切分成等大的數(shù)據(jù)塊言缤,以多副本的形式存儲(chǔ)到多個(gè)節(jié)點(diǎn)上嚼蚀。

HDFS采用了經(jīng)典的主從軟件架構(gòu),其中主服務(wù)被稱為NameNode管挟,管理文件系統(tǒng)的元信息轿曙,而從服務(wù)被稱為DataNode,存儲(chǔ)實(shí)際的數(shù)據(jù)塊僻孝,

DataNode與NameNode維護(hù)了周期性的心跳导帝,為了防止NameNode出現(xiàn)單點(diǎn)故障,HDFS允許一個(gè)集群中存在主備NameNode穿铆,并通過(guò)ZooKeeper完成Active NameNode的選舉工作您单。

HDFS提供了豐富的訪問(wèn)方式,用戶可以通過(guò)HDFS shell, HDFS API荞雏,數(shù)據(jù)收集組件以及計(jì)算框架等存取HDFS上的文件虐秦。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市讯檐,隨后出現(xiàn)的幾起案子羡疗,更是在濱河造成了極大的恐慌染服,老刑警劉巖别洪,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異柳刮,居然都是意外死亡挖垛,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門秉颗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)痢毒,“玉大人,你說(shuō)我怎么就攤上這事蚕甥∧奶妫” “怎么了?”我有些...
    開封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵菇怀,是天一觀的道長(zhǎng)凭舶。 經(jīng)常有香客問(wèn)我晌块,道長(zhǎng),這世上最難降的妖魔是什么帅霜? 我笑而不...
    開封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任匆背,我火速辦了婚禮,結(jié)果婚禮上身冀,老公的妹妹穿的比我還像新娘钝尸。我一直安慰自己,他們只是感情好搂根,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開白布珍促。 她就那樣靜靜地躺著,像睡著了一般剩愧。 火紅的嫁衣襯著肌膚如雪踢星。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天隙咸,我揣著相機(jī)與錄音沐悦,去河邊找鬼。 笑死五督,一個(gè)胖子當(dāng)著我的面吹牛藏否,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播充包,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼副签,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了基矮?” 一聲冷哼從身側(cè)響起淆储,我...
    開封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎家浇,沒(méi)想到半個(gè)月后本砰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡钢悲,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年点额,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片莺琳。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡还棱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出惭等,到底是詐尸還是另有隱情珍手,我是刑警寧澤,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站琳要,受9級(jí)特大地震影響料扰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜焙蹭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一添忘、第九天 我趴在偏房一處隱蔽的房頂上張望惹恃。 院中可真熱鬧,春花似錦、人聲如沸剪决。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)有决。三九已至,卻和暖如春污桦,著一層夾襖步出監(jiān)牢的瞬間亩歹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工凡橱, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留小作,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓稼钩,卻偏偏與公主長(zhǎng)得像顾稀,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子坝撑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

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