HDFS的运行原理
簡(jiǎn)介
HDFS(Hadoop Distributed File System )Hadoop分布式文件系統(tǒng)。是根據(jù)google發(fā)表的論文翻版的。論文為GFS(Google File System)Google 文件系統(tǒng)(中文,英文)。
HDFS有很多特點(diǎn):
? ??①?保存多個(gè)副本,且提供容錯(cuò)機(jī)制,副本丟失或宕機(jī)自動(dòng)恢復(fù)。默認(rèn)存3份。
? ??②?運(yùn)行在廉價(jià)的機(jī)器上。
? ??③?適合大數(shù)據(jù)的處理。多大?多小?HDFS默認(rèn)會(huì)將文件分割成block,64M為1個(gè)block。然后將block按鍵值對(duì)存儲(chǔ)在HDFS上,并將鍵值對(duì)的映射存到內(nèi)存中。如果小文件太多,那內(nèi)存的負(fù)擔(dān)會(huì)很重。
如上圖所示,HDFS也是按照Master和Slave的結(jié)構(gòu)。分NameNode、SecondaryNameNode、DataNode這幾個(gè)角色。
NameNode:是Master節(jié)點(diǎn),是大領(lǐng)導(dǎo)。管理數(shù)據(jù)塊映射;處理客戶端的讀寫(xiě)請(qǐng)求;配置副本策略;管理HDFS的名稱(chēng)空間;
SecondaryNameNode:是一個(gè)小弟,分擔(dān)大哥namenode的工作量;是NameNode的冷備份;合并fsimage和fsedits然后再發(fā)給namenode。
DataNode:Slave節(jié)點(diǎn),奴隸,干活的。負(fù)責(zé)存儲(chǔ)client發(fā)來(lái)的數(shù)據(jù)塊block;執(zhí)行數(shù)據(jù)塊的讀寫(xiě)操作。
熱備份:b是a的熱備份,如果a壞掉。那么b馬上運(yùn)行代替a的工作。
冷備份:b是a的冷備份,如果a壞掉。那么b不能馬上代替a工作。但是b上存儲(chǔ)a的一些信息,減少a壞掉之后的損失。
fsimage:元數(shù)據(jù)鏡像文件(文件系統(tǒng)的目錄樹(shù)。)
edits:元數(shù)據(jù)的操作日志(針對(duì)文件系統(tǒng)做的修改操作記錄)
namenode內(nèi)存中存儲(chǔ)的是=fsimage+edits。
SecondaryNameNode負(fù)責(zé)定時(shí)默認(rèn)1小時(shí),從namenode上,獲取fsimage和edits來(lái)進(jìn)行合并,然后再發(fā)送給namenode。減少namenode的工作量。
?
?
?
?
工作原理
寫(xiě)操作:
有一個(gè)文件FileA,100M大小。Client將FileA寫(xiě)入到HDFS上。
HDFS按默認(rèn)配置。
HDFS分布在三個(gè)機(jī)架上Rack1,Rack2,Rack3。
?
a.?Client將FileA按64M分塊。分成兩塊,block1和Block2;
b.?Client向nameNode發(fā)送寫(xiě)數(shù)據(jù)請(qǐng)求,如圖藍(lán)色虛線①------>。
c.?NameNode節(jié)點(diǎn),記錄block信息。并返回可用的DataNode,如粉色虛線②--------->。
??? Block1: host2,host1,host3
??? Block2: host7,host8,host4
??? 原理:
??????? NameNode具有RackAware機(jī)架感知功能,這個(gè)可以配置。
??????? 若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,不同副本1,機(jī)架上;副本3,同副本2相同的另一個(gè)節(jié)點(diǎn)上;其他副本隨機(jī)挑選。
d.?client向DataNode發(fā)送block1;發(fā)送過(guò)程是以流式寫(xiě)入。
? ? 流式寫(xiě)入過(guò)程,
? ? ? ??1>將64M的block1按64k的package劃分;
? ? ? ??2>然后將第一個(gè)package發(fā)送給host2;
? ? ? ??3>host2接收完后,將第一個(gè)package發(fā)送給host1,同時(shí)client想host2發(fā)送第二個(gè)package;
? ? ? ??4>host1接收完第一個(gè)package后,發(fā)送給host3,同時(shí)接收host2發(fā)來(lái)的第二個(gè)package。
? ? ? ??5>以此類(lèi)推,如圖紅線實(shí)線所示,直到將block1發(fā)送完畢。
? ? ? ??6>host2,host1,host3向NameNode,host2向Client發(fā)送通知,說(shuō)“消息發(fā)送完了”。如圖粉紅顏色實(shí)線所示。
? ? ? ??7>client收到host2發(fā)來(lái)的消息后,向namenode發(fā)送消息,說(shuō)我寫(xiě)完了。這樣就真完成了。如圖黃色粗實(shí)線
? ? ? ??8>發(fā)送完block1后,再向host7,host8,host4發(fā)送block2,如圖藍(lán)色實(shí)線所示。
? ? ? ??9>發(fā)送完block2后,host7,host8,host4向NameNode,host7向Client發(fā)送通知,如圖淺綠色實(shí)線所示。
? ? ? ??10>client向NameNode發(fā)送消息,說(shuō)我寫(xiě)完了,如圖黃色粗實(shí)線。。。這樣就完畢了。
分析,通過(guò)寫(xiě)過(guò)程,我們可以了解到:
? ??①寫(xiě)1T文件,我們需要3T的存儲(chǔ),3T的網(wǎng)絡(luò)流量貸款。
? ??②在執(zhí)行讀或?qū)懙倪^(guò)程中,NameNode和DataNode通過(guò)HeartBeat進(jìn)行保存通信,確定DataNode活著。如果發(fā)現(xiàn)DataNode死掉了,就將死掉的DataNode上的數(shù)據(jù),放到其他節(jié)點(diǎn)去。讀取時(shí),要讀其他節(jié)點(diǎn)去。
? ??③掛掉一個(gè)節(jié)點(diǎn),沒(méi)關(guān)系,還有其他節(jié)點(diǎn)可以備份;甚至,掛掉某一個(gè)機(jī)架,也沒(méi)關(guān)系;其他機(jī)架上,也有備份。
?
讀操作:
?
讀操作就簡(jiǎn)單一些了,如圖所示,client要從datanode上,讀取FileA。而FileA由block1和block2組成。?
?
那么,讀操作流程為:
a.?client向namenode發(fā)送讀請(qǐng)求。
b.?namenode查看Metadata信息,返回fileA的block的位置。
? ? block1:host2,host1,host3
? ? block2:host7,host8,host4
c.?block的位置是有先后順序的,先讀block1,再讀block2。而且block1去host2上讀取;然后block2,去host7上讀取;
?
上面例子中,client位于機(jī)架外,那么如果client位于機(jī)架內(nèi)某個(gè)DataNode上,例如,client是host6。那么讀取的時(shí)候,遵循的規(guī)律是:
優(yōu)選讀取本機(jī)架上的數(shù)據(jù)。
?
?
?
?
HDFS中常用到的命令
1、hadoop fs
+ View Code?| 1 2 3 4 5 6 7 8 9 10 11 12 13 | hadoop fs -ls / hadoop fs -lsr hadoop fs -mkdir /user/hadoop hadoop fs -put a.txt /user/hadoop/ hadoop fs -get /user/hadoop/a.txt / hadoop fs -cp src dst hadoop fs -mv src dst hadoop fs -cat /user/hadoop/a.txt hadoop fs -rm /user/hadoop/a.txt hadoop fs -rmr /user/hadoop/a.txt hadoop fs -text /user/hadoop/a.txt hadoop fs -copyFromLocal localsrc dst 與hadoop fs -put功能類(lèi)似。 hadoop fs -moveFromLocal localsrc dst 將本地文件上傳到hdfs,同時(shí)刪除本地文件。 |
2、hadoop fsadmin?
+ View Code?| 1 2 3 | hadoop dfsadmin -report hadoop dfsadmin -safemode enter | leave | get | wait hadoop dfsadmin -setBalancerBandwidth?1000 |
3、hadoop fsck
4、start-balancer.sh
總結(jié)
- 上一篇: 背包问题I--最大字段和
- 下一篇: Hadoop MapReduce