簡介:
HDFS(Hadoop Distributed File System )Hadoop分布式文件系統(tǒng)。是根據(jù)google發(fā)表的論文翻版的厢洞。論文為GFS(Google File System)Google 文件系統(tǒng)([中文]砍的,[英文])运嗜。
HDFS有很多特點:
**① **保存多個副本晕城,且提供容錯機制催植,副本丟失或宕機自動恢復叠纷。默認存3份刻帚。
**② **運行在廉價的機器上。
**③ **適合大數(shù)據(jù)的處理涩嚣。多大崇众?多小航厚?HDFS默認會將文件分割成block顷歌,64M為1個block。然后將block按鍵值對存儲在HDFS上幔睬,并將鍵值對的映射存到內(nèi)存中眯漩。如果小文件太多,那內(nèi)存的負擔會很重麻顶。
如上圖所示赦抖,HDFS也是按照Master和Slave的結(jié)構。分NameNode辅肾、SecondaryNameNode队萤、DataNode這幾個角色。
NameNode:是Master節(jié)點矫钓,是大領導要尔。管理數(shù)據(jù)塊映射舍杜;處理客戶端的讀寫請求;配置副本策略赵辕;管理HDFS的名稱空間既绩;(它是整個文件系統(tǒng)的管理節(jié)點。維護著整個文件系統(tǒng)的文件目錄樹还惠,文件/目錄的元信息和每個文件對應的數(shù)據(jù)塊列表熬词。接收用戶的操作qingqi)
SecondaryNameNode:是一個小弟,分擔大哥namenode的工作量吸重;是NameNode的冷備份互拾;合并fsimage和fsedits然后再發(fā)給namenode。
DataNode:Slave節(jié)點嚎幸,奴隸颜矿,干活的。負責存儲client發(fā)來的數(shù)據(jù)塊block嫉晶;執(zhí)行數(shù)據(jù)塊的讀寫操作骑疆。
熱備份:b是a的熱備份,如果a壞掉替废。那么b馬上運行代替a的工作箍铭。
冷備份:b是a的冷備份,如果a壞掉椎镣。那么b不能馬上代替a工作诈火。但是b上存儲a的一些信息,減少a壞掉之后的損失状答。
fsimage:元數(shù)據(jù)鏡像文件(文件系統(tǒng)的目錄樹冷守。)
edits:元數(shù)據(jù)的操作日志(針對文件系統(tǒng)做的修改操作記錄)
namenode內(nèi)存中存儲的是=fsimage+edits。**
SecondaryNameNode負責定時默認1小時惊科,從namenode上拍摇,獲取fsimage和edits來進行合并,然后再發(fā)送給namenode馆截。減少namenode的工作量充活。
工作原理
寫操作:
有一個文件FileA,100M大小蜡娶。Client將FileA寫入到HDFS上混卵。
HDFS按默認配置。
HDFS分布在三個機架上Rack1翎蹈,Rack2淮菠,Rack3。
a. Client將FileA按64M分塊荤堪。分成兩塊合陵,block1和Block2;
b. Client向nameNode發(fā)送寫數(shù)據(jù)請求枢赔,如圖藍色虛線①------>。
c. NameNode節(jié)點拥知,記錄block信息踏拜。并返回可用的DataNode,如粉色虛線②--------->低剔。
Block1: host2,host1,host3
Block2: host7,host8,host4
原理:
NameNode具有RackAware機架感知功能速梗,這個可以配置。
若client為DataNode節(jié)點襟齿,那存儲block時姻锁,規(guī)則為:副本1,同client的節(jié)點上猜欺;副本2位隶,不同機架節(jié)點上;副本3开皿,同第二個副本機架的另一個節(jié)點上涧黄;其他副本隨機挑選。
若client不為DataNode節(jié)點赋荆,那存儲block時笋妥,規(guī)則為:副本1,隨機選擇一個節(jié)點上窄潭;副本2春宣,不同副本1,機架上狈孔;副本3信认,同副本2相同的另一個節(jié)點上材义;其他副本隨機挑選均抽。
d. client向DataNode發(fā)送block1;發(fā)送過程是以流式寫入其掂。
流式寫入過程油挥,
** 1>**將64M的block1按64k的package劃分;
2>然后將第一個package發(fā)送給host2;
3>host2接收完后,將第一個package發(fā)送給host1,同時client想host2發(fā)送第二個package;
4>host1接收完第一個package后阳液,發(fā)送給host3晋修,同時接收host2發(fā)來的第二個package。
5>以此類推急黎,如圖紅線實線所示,直到將block1發(fā)送完畢。
6>host2,host1,host3向NameNode闰集,host2向Client發(fā)送通知沽讹,說“消息發(fā)送完了”。如圖粉紅顏色實線所示武鲁。
7>client收到host2發(fā)來的消息后爽雄,向namenode發(fā)送消息,說我寫完了沐鼠。這樣就真完成了挚瘟。如圖黃色粗實線
8>發(fā)送完block1后,再向host7饲梭,host8乘盖,host4發(fā)送block2,如圖藍色實線所示憔涉。
9>發(fā)送完block2后侧漓,host7,host8,host4向NameNode,host7向Client發(fā)送通知监氢,如圖淺綠色實線所示布蔗。
10>client向NameNode發(fā)送消息,說我寫完了浪腐,如圖黃色粗實線纵揍。。议街。這樣就完畢了泽谨。
分析,通過寫過程特漩,我們可以了解到:
①寫1T文件吧雹,我們需要3T的存儲,3T的網(wǎng)絡流量貸款涂身。
②在執(zhí)行讀或?qū)懙倪^程中雄卷,NameNode和DataNode通過HeartBeat進行保存通信,確定DataNode活著蛤售。如果發(fā)現(xiàn)DataNode死掉了丁鹉,就將死掉的DataNode上的數(shù)據(jù),放到其他節(jié)點去悴能。讀取時揣钦,要讀其他節(jié)點去。
③掛掉一個節(jié)點漠酿,沒關系冯凹,還有其他節(jié)點可以備份;甚至炒嘲,掛掉某一個機架宇姚,也沒關系团驱;其他機架上,也有備份空凸。
讀操作:
讀操作就簡單一些了嚎花,如圖所示,client要從datanode上呀洲,讀取FileA紊选。而FileA由block1和block2組成。
那么道逗,讀操作流程為:
a. client向namenode發(fā)送讀請求兵罢。
b. namenode查看Metadata信息,返回fileA的block的位置滓窍。
block1:host2,host1,host3
block2:host7,host8,host4
c. block的位置是有先后順序的卖词,先讀block1,再讀block2吏夯。而且block1去host2上讀却蓑凇;然后block2噪生,去host7上讀锐烧浴;
上面例子中跺嗽,client位于機架外战授,那么如果client位于機架內(nèi)某個DataNode上,例如,client是host6桨嫁。那么讀取的時候植兰,遵循的規(guī)律是:
優(yōu)選讀取本機架上的數(shù)據(jù)。
HDFS中常用到的命令
1璃吧、hadoop fs
+ View Code
2楣导、hadoop fsadmin
+ View Code
3、hadoop fsck
4肚逸、start-balancer.sh
HDFS目錄結(jié)構