HDFS原理分析

微信公眾號(hào): Spark大數(shù)據(jù)

1、HDFS有什么作用

HDFS是Hadoop Distribute File System 的簡稱,也就是Hadoop的一個(gè)分布式文件系統(tǒng)。
1)高容錯(cuò):提供較高的容錯(cuò)率,因?yàn)閿?shù)據(jù)有備份星立,通過機(jī)架感知策略爽茴,namenode會(huì)盡量將數(shù)據(jù)的復(fù)本放到不同的機(jī)架上,所以小規(guī)模的宕機(jī)不影響數(shù)據(jù)的存儲(chǔ)贞铣。
對(duì)于網(wǎng)絡(luò)的就近原則闹啦,先近再遠(yuǎn),如果有多個(gè)機(jī)架辕坝,會(huì)在多個(gè)機(jī)架建立副本。

宕機(jī):操作系統(tǒng)無法從一個(gè)嚴(yán)重系統(tǒng)錯(cuò)誤中恢復(fù)過來荐健,或系統(tǒng)硬件層面出問題酱畅,以致系統(tǒng)長時(shí)間無響應(yīng),而不得不重新啟動(dòng)計(jì)算機(jī)的現(xiàn)象江场。

2)成本低:可以使用低成本的硬件搭建一個(gè)分布式文件系統(tǒng)纺酸。

3)規(guī)模大:能提供大規(guī)模的數(shù)據(jù)存儲(chǔ),上TB址否、PB級(jí)的規(guī)模餐蔬。

4)高吞吐:高吞吐的數(shù)據(jù)訪問,獲得一個(gè)完整的數(shù)據(jù)可以從多個(gè)機(jī)器上同時(shí)讀取佑附。

5)讀取方式多樣:計(jì)算時(shí)數(shù)據(jù)讀取的方式多采用本地化方式樊诺,如果本地化方式不滿足則采用臨近網(wǎng)絡(luò)的方式,這也是通過機(jī)架感知策略音同。

2词爬、機(jī)架感知策略的實(shí)現(xiàn)機(jī)制

默認(rèn)情況下,Hadoop機(jī)架感知是沒有啟用的权均,需要在NameNode機(jī)器的hadoop-site.xml里配置一個(gè)選項(xiàng)顿膨,例如:

<property>  
    <name>topology.script.file.name</name>
    <value>/path/to/script</value>
</property>

這個(gè)配置選項(xiàng)的value指定為一個(gè)可執(zhí)行程序,通常為一個(gè)腳本叽赊,該腳本接受一個(gè)參數(shù)恋沃,輸出一個(gè)值。接受的參數(shù)通常為datanode機(jī)器的ip地址必指,而輸出的值通常為該ip地址對(duì)應(yīng)的datanode所在的rackID囊咏,例如”/rackid1”。

Namenode啟動(dòng)時(shí)取劫,會(huì)判斷該配置選項(xiàng)是否為空匆笤,如果非空,則表示已經(jīng)啟用機(jī)架感知的配置谱邪,此時(shí)namenode會(huì)根據(jù)配置尋找該腳本炮捧,并在接收到每一個(gè)datanode的heartbeat時(shí),將該datanode的ip地址作為參數(shù)傳給該腳本運(yùn)行惦银,并將得到的輸出作為該datanode所屬的機(jī)架咆课,保存到內(nèi)存的一個(gè)map中末誓。

3、HDFS的系統(tǒng)結(jié)構(gòu)

HA:高可用

namenode:大領(lǐng)導(dǎo)书蚪,管理數(shù)據(jù)塊映射喇澡;處理客戶端的讀寫請(qǐng)求。一般有一個(gè)active狀態(tài)的namenode殊校,有一個(gè)standby狀態(tài)的namenode晴玖,其中,active狀態(tài)的NameNode負(fù)責(zé)所有的客戶端操作为流,standby狀態(tài)的NameNode處于從屬地位呕屎,維護(hù)著數(shù)據(jù)狀態(tài),隨時(shí)準(zhǔn)備切換敬察。

journalnode:負(fù)責(zé)兩個(gè)狀態(tài)的namenode進(jìn)行數(shù)據(jù)同步秀睛,保持?jǐn)?shù)據(jù)一致。

ZKFC:作用是HA自動(dòng)切換莲祸。會(huì)將NameNode的active狀態(tài)信息保存到zookeeper蹂安。

datanode:干活的,負(fù)責(zé)存儲(chǔ)client發(fā)來的數(shù)據(jù)塊block锐帜;執(zhí)行數(shù)據(jù)塊的讀寫操作田盈。

namenode和datanode之間的關(guān)系:

1)datanode啟動(dòng)時(shí)要在namenode上注冊(cè),當(dāng)datanode改變時(shí)抹估,也要通知namenode缠黍。datanode 會(huì)定期向NameNode發(fā)送心跳,告知NameNode 該節(jié)點(diǎn)的datanode是活著的药蜻。

2)datanode之間可以相互傳輸數(shù)據(jù)瓷式。

4、數(shù)據(jù)塊——block

1)數(shù)據(jù)塊是基本的數(shù)據(jù)存儲(chǔ)單位语泽,一般大小為64M/128M/256M贸典,一個(gè)大文件根據(jù)數(shù)據(jù)塊的大小,將文件分為若干個(gè)塊踱卵。NameNode存儲(chǔ)的文件對(duì)應(yīng)的block映射信息廊驼;而datanode存儲(chǔ)塊信息對(duì)應(yīng)的數(shù)據(jù)。

2)塊越小讀取的速度就越快惋砂,但是整體占用namenode的空間就越大妒挎,因?yàn)椴还軌K大小一個(gè)塊所占用的namenode內(nèi)存存儲(chǔ)空間為一般為150字節(jié)。

3)一個(gè)大文件會(huì)被拆分成一個(gè)個(gè)的塊西饵,然后存儲(chǔ)于不同的機(jī)器酝掩。對(duì)于大規(guī)模的集群會(huì)存儲(chǔ)在不同的機(jī)架上,如果一個(gè)文件少于Block大小眷柔,那么實(shí)際占用的空間為其文件的大小期虾。

4)數(shù)據(jù)塊也是基本的讀寫單位原朝,類似于磁盤的扇區(qū),每次都是讀寫一個(gè)塊镶苞。讀寫多個(gè)塊就合成了一個(gè)文件喳坠。

5)為了容錯(cuò),文件的所有數(shù)據(jù)塊都會(huì)有副本茂蚓,也就是說復(fù)制的是數(shù)據(jù)塊而不是單獨(dú)的一個(gè)文件被復(fù)制了壕鹉,默認(rèn)復(fù)制3份,可以在hdft-site.xml里進(jìn)行配置聋涨。

6)副本的數(shù)據(jù)的存儲(chǔ)規(guī)則:

① 若client為DataNode節(jié)點(diǎn)御板,那存儲(chǔ)block時(shí),規(guī)則為:副本1牛郑,同client的節(jié)點(diǎn)上;副本2敬鬓,不同機(jī)架節(jié)點(diǎn)上淹朋;副本3,同第二個(gè)副本機(jī)架的另一個(gè)節(jié)點(diǎn)上钉答;其他副本隨機(jī)挑選础芍。

② 若client不為DataNode節(jié)點(diǎn),那存儲(chǔ)block時(shí)数尿,規(guī)則為:副本1仑性,隨機(jī)選擇一個(gè)節(jié)點(diǎn)上;副本2右蹦,不同機(jī)架節(jié)點(diǎn)上诊杆;副本3,同第二個(gè)副本機(jī)架的另一個(gè)節(jié)點(diǎn)上何陆;其他副本隨機(jī)挑選晨汹。

5、 namenode

1)namenode是整個(gè)集群的中心贷盲,負(fù)責(zé)安排管理集群中數(shù)據(jù)的存儲(chǔ)并記錄存儲(chǔ)文件的元數(shù)據(jù)和負(fù)責(zé)客戶端對(duì)文件的訪問淘这。

2)存儲(chǔ)文件的元數(shù)據(jù)(metadata),主要包括整個(gè)文件系統(tǒng)的目錄樹巩剖、文件名與blockid的映射關(guān)系铝穷、blockid在哪個(gè)datanode上。

3)在運(yùn)行時(shí)把所有的元數(shù)據(jù)都保存到namenode機(jī)器的內(nèi)存中佳魔,所以整個(gè)HDFS可存儲(chǔ)的文件數(shù)受限于namenode的內(nèi)存大小曙聂。


4)一個(gè)block 在namenode中對(duì)應(yīng)一條記錄。

5)namenode的元數(shù)據(jù)的鏡像文件(fsimage)會(huì)保存到本地磁盤吃引,但不保存block具體的位置信息筹陵,而是由DataNode注冊(cè)和運(yùn)行時(shí)進(jìn)行上報(bào)維護(hù)刽锤。

6)namenode崩潰了,那整個(gè)HDFS也就崩潰了朦佩,所以要采用冗余的方案來保證NameNode的高可用性并思。

7)元數(shù)據(jù)fsimage的保存不及時(shí),如果namenode要是宕機(jī)了怎么辦语稠?
可以通過HDFS的操作日志記錄文件(editlog)來恢復(fù)宋彼,如果元數(shù)據(jù)fsimage完整就直接恢復(fù),不完整再用editlog進(jìn)行補(bǔ)余仙畦。

6输涕、datanode

1)保存block塊對(duì)應(yīng)的具體數(shù)據(jù);給NameNode發(fā)送心跳慨畸;負(fù)責(zé)數(shù)據(jù)的讀寫和復(fù)制操作莱坎。

2)datanode啟動(dòng)時(shí)會(huì)向namenode報(bào)告當(dāng)前存儲(chǔ)的數(shù)據(jù)塊信息,也會(huì)持續(xù)的報(bào)告數(shù)據(jù)塊的修改信息寸士。

3)datanode之間會(huì)進(jìn)行互相通信檐什,來完成復(fù)制數(shù)據(jù)塊的動(dòng)作,以保證數(shù)據(jù)的冗余性弱卡。

7乃正、HDFS數(shù)據(jù)的寫入過程

1)客戶端發(fā)起數(shù)據(jù)寫入請(qǐng)求,告訴namenode要寫入的文件信息婶博;
2)namenode根據(jù)你的情況(client端所在位置瓮具、文件大小)分配給你分配寫入數(shù)據(jù)的位置也就是寫到那幾個(gè)機(jī)器上凡人;
3)向datanode寫入數(shù)據(jù)名党;
4)datanode復(fù)制數(shù)據(jù);
5)復(fù)制完成之后划栓,各數(shù)據(jù)節(jié)點(diǎn)向namenode上報(bào)block信息兑巾;
6)datanode通知客戶端已完成;

8忠荞、HDFS數(shù)據(jù)的讀取過程

1)客戶端發(fā)起讀數(shù)據(jù)的請(qǐng)求蒋歌;
2)告訴namenode要讀那個(gè)文件;
3)namenode返回block信息列表(包括要讀取的數(shù)據(jù)在那個(gè)機(jī)器上)委煤;
4)到指定的機(jī)器上讀取具體的數(shù)據(jù)堂油;
5)datanode根據(jù)block信息找到數(shù)據(jù)的存儲(chǔ)位置并返回?cái)?shù)據(jù)給客戶端;
6)客戶端讀完數(shù)據(jù)之后告訴namenode我已經(jīng)讀取完成碧绞;

關(guān)注微信公眾號(hào):Spark大數(shù)據(jù) 或許更多內(nèi)容

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末府框,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子讥邻,更是在濱河造成了極大的恐慌迫靖,老刑警劉巖院峡,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異系宜,居然都是意外死亡照激,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門盹牧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來俩垃,“玉大人,你說我怎么就攤上這事汰寓】诹” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵有滑,是天一觀的道長跃闹。 經(jīng)常有香客問我,道長毛好,這世上最難降的妖魔是什么辣卒? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮睛榄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘想帅。我一直安慰自己场靴,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布港准。 她就那樣靜靜地躺著旨剥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪浅缸。 梳的紋絲不亂的頭發(fā)上轨帜,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音衩椒,去河邊找鬼蚌父。 笑死,一個(gè)胖子當(dāng)著我的面吹牛毛萌,可吹牛的內(nèi)容都是我干的苟弛。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼阁将,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼膏秫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起做盅,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤缤削,失蹤者是張志新(化名)和其女友劉穎窘哈,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體亭敢,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡滚婉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吨拗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片满哪。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖劝篷,靈堂內(nèi)的尸體忽然破棺而出哨鸭,到底是詐尸還是另有隱情,我是刑警寧澤娇妓,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布像鸡,位于F島的核電站,受9級(jí)特大地震影響哈恰,放射性物質(zhì)發(fā)生泄漏只估。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一着绷、第九天 我趴在偏房一處隱蔽的房頂上張望蛔钙。 院中可真熱鬧,春花似錦荠医、人聲如沸吁脱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽兼贡。三九已至,卻和暖如春娃胆,著一層夾襖步出監(jiān)牢的瞬間遍希,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來泰國打工里烦, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留凿蒜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓胁黑,卻偏偏與公主長得像篙程,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子别厘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353