目錄
- 一、HDFS的優(yōu)缺點(diǎn)
- 1.HDFS優(yōu)點(diǎn):
- 2.HDFS缺點(diǎn)
- 二、HDFS的架構(gòu)
- 三、HDFS數(shù)據(jù)存儲(chǔ)單元(block)
- 四、HDFS設(shè)計(jì)思想
- 五、NameNode(NN)、 SencondryNameNode (SNN)、DataNode(DN)
- 1.NameNode (NN) 的工作
- 2.SecondryNameNode(SNN) 的工作
- 3.DataNode (DN)
- 六、HDFS的寫流程和讀流程
- 七、HDFS文件權(quán)限
- 八、安全模式
HDFS是Hadoop Distribute File System 的簡(jiǎn)稱,也就是Hadoop的一個(gè)分布式文件系統(tǒng)。
一、HDFS的優(yōu)缺點(diǎn)
1.HDFS優(yōu)點(diǎn):
a.高容錯(cuò)性
.數(shù)據(jù)保存多個(gè)副本
.數(shù)據(jù)丟的失后自動(dòng)恢復(fù)
b.適合批處理
.移動(dòng)計(jì)算而非移動(dòng)數(shù)據(jù)
.數(shù)據(jù)位置暴露給計(jì)算框架
c.適合大數(shù)據(jù)處理
.GB、TB、甚至PB級(jí)的數(shù)據(jù)處理
.百萬規(guī)模以上的文件數(shù)據(jù)
.10000+的節(jié)點(diǎn)
d.可構(gòu)建在廉價(jià)的機(jī)器上
.通過多副本存儲(chǔ),提高可靠性
.提供了容錯(cuò)和恢復(fù)機(jī)制
2.HDFS缺點(diǎn)
a.低延遲數(shù)據(jù)訪問處理較弱
.毫秒級(jí)別的訪問響應(yīng)較慢
.低延遲和高吞吐率的請(qǐng)求處理較弱
b.大量小文件存取處理較弱
.會(huì)占用大量NameNode的內(nèi)存
.尋道時(shí)間超過讀取時(shí)間
c.并發(fā)寫入、文件隨機(jī)修改
.一個(gè)文件僅有一個(gè)寫者
.僅支持Append寫入
二、HDFS的架構(gòu)
如上圖所示,HDFS也是按照Master和Slave的結(jié)構(gòu)。分NameNode、SecondaryNameNode、DataNode這幾個(gè)角色。
NameNode:是Master節(jié)點(diǎn),是大領(lǐng)導(dǎo)。管理數(shù)據(jù)塊映射;處理客戶端的讀寫請(qǐng)求;配置副本策略;管理HDFS的名稱空間;
SecondaryNameNode:是一個(gè)小弟,分擔(dān)大哥namenode的一部分工作量;是NameNode的冷備份;合并fsimage和fsedits然后再發(fā)給namenode。
DataNode:Slave節(jié)點(diǎn),奴隸,干活的。負(fù)責(zé)存儲(chǔ)client發(fā)來的數(shù)據(jù)塊block;執(zhí)行數(shù)據(jù)塊的讀寫操作。
熱備份:b是a的熱備份,如果a壞掉。那么b馬上運(yùn)行代替a的工作。
冷備份:b是a的冷備份,如果a壞掉。那么b不能馬上代替a工作。但是b上存儲(chǔ)a的一些信息,減少a壞掉之后的損失。
fsimage:元數(shù)據(jù)鏡像文件(文件系統(tǒng)的目錄樹。)
edits:元數(shù)據(jù)的操作日志(針對(duì)文件系統(tǒng)做的修改操作記錄)
namenode內(nèi)存中存儲(chǔ)的是=fsimage+edits。
SecondaryNameNode負(fù)責(zé)定時(shí)默認(rèn)1小時(shí),從namenode上,獲取fsimage和edits來進(jìn)行合并,然后再發(fā)送給namenode。減少namenode的工作量。
三、HDFS數(shù)據(jù)存儲(chǔ)單元(block)
1.文件被切割成固大小的數(shù)據(jù)塊
a.默認(rèn)數(shù)據(jù)塊大小是64MB,數(shù)據(jù)塊大小可配置
b.若數(shù)據(jù)塊大小不到64MB,則單獨(dú)成一個(gè)數(shù)據(jù)塊
2.一個(gè)文件存儲(chǔ)方式
a.按大小切割成若干個(gè)block,存儲(chǔ)在不同的節(jié)點(diǎn)上
b.每個(gè)block默認(rèn)存三個(gè)副本
block大小和副本數(shù)由Client上傳文件的時(shí)候設(shè)置,文件上傳成功以后,副本數(shù)可以變更,但是Block 大小不可變。
四、HDFS設(shè)計(jì)思想
一個(gè)50G的文件上傳到HDFS上,首先該文件被切割成了若干個(gè)64MB的block,block1在node1,node2,node3上存儲(chǔ)了3(默認(rèn)3個(gè),可以設(shè)置)個(gè)副本,block2在node2,node3,node4上存儲(chǔ)了3個(gè)副 本block3....直到所有的block都存儲(chǔ)3個(gè)副本;
五、NameNode(NN)、 SencondryNameNode (SNN)、DataNode(DN)
1.NameNode (NN) 的工作
a.接受客戶端的讀寫服務(wù)
b.保存metadata的信息,包括:文件的owership和permissions、文件包含哪些block、block保存在哪些DataNode節(jié)點(diǎn)上(在啟動(dòng)時(shí)由DataNode上報(bào))
c.NameNode 的metadata信息會(huì)在啟動(dòng)后加載到內(nèi)存中
.metadata信息在磁盤上存儲(chǔ)的文件為“fsimage”
.Block的位置信息不保存在fsimage中(由DataNode上報(bào))
.edits中保存對(duì)metadata的操作日志
2.SecondryNameNode(SNN) 的工作
a.它不是NN的備份(但可以做NN的部分備份的工作),它的主要工作是幫助NN合并edits log 減少NN的啟動(dòng)時(shí)間
b.SNN合并時(shí)機(jī)
.根據(jù)配置文件設(shè)置的時(shí)間間隔fs.checkpoint.period 默認(rèn)3600秒
.根據(jù)配置文件設(shè)置的edits log的大小 fs.checpoint.size 默認(rèn)的edits log 大小為64MB
c.SNN合并流程
1>NN 創(chuàng)建一個(gè)新的edits log 來接替老的 edits 的工作
2>NN 將fsimage 和 舊的edits 拷備到 SNN上
3>SNN上進(jìn)行合并操作,產(chǎn)生一個(gè)新的fsimage
4>將新的fsimage 復(fù)制一份到NN上
5>使用新的fsimage 和 新的edits log
3.DataNode (DN)
a.存儲(chǔ)數(shù)塊(block)
b.啟動(dòng)DN線程時(shí),DN會(huì)自動(dòng)向NN匯報(bào)Block的信息
c.NN向DN發(fā)送心跳檢測(cè),與其DN保持聯(lián)系(3秒一次) 如果NN 連續(xù)10分鐘沒有收到DN的心跳,則認(rèn)為該DN已經(jīng)lost,并從其他DN中備份一份該DN上的所有block
d.block的放置策略
.第一個(gè)副本,放置在上傳文件的DN上,如果是集群外提交,則隨便選擇一臺(tái)磁盤、內(nèi)存、CPU不太忙的節(jié)點(diǎn)存儲(chǔ)
.第二個(gè)副本,放置在與第一個(gè)副本不同機(jī)架上的節(jié)點(diǎn)上
.第三個(gè)副本,放置在與第二個(gè)副本相同機(jī)架上的相鄰的節(jié)點(diǎn)上
.更多副本隨機(jī)放置
六、HDFS的寫流程和讀流程
1.HDFS寫流程
例:
有一個(gè)文件FileA,100M大小。Client將FileA寫入到HDFS上。
HDFS按默認(rèn)配置。
HDFS分布在三個(gè)機(jī)架上Rack1,Rack2,Rack3。
a.Client將FileA按64M分塊。分成兩塊,block1和Block2;
b.Client向nameNode發(fā)送寫數(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ā)送過程是以流式寫入。
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ā)來的第二個(gè)package。
5>以此類推,如圖紅線實(shí)線所示,直到將block1發(fā)送完畢。
6>host2,host1,host3向NameNode,host2向Client發(fā)送通知,說“消息發(fā)送完了”。如圖粉紅顏色實(shí)線所示。
7>client收到host2發(fā)來的消息后,向namenode發(fā)送消息,說我寫完了。這樣就真完成了。如圖黃色粗實(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ā)送消息,說我寫完了,如圖黃色粗實(shí)線。。。這樣就完畢了。
分析,通過寫過程,我們可以了解到:
?、賹?T文件,我們需要3T的存儲(chǔ),3T的網(wǎng)絡(luò)流量貸款。
②在執(zhí)行讀或?qū)懙倪^程中,NameNode和DataNode通過HeartBeat進(jìn)行保存通信,確定DataNode活著。如果發(fā)現(xiàn)DataNode死掉了,就將死掉的DataNode上的數(shù)據(jù),放到其他節(jié)點(diǎn)去。讀取時(shí),要讀其他節(jié)點(diǎn)去。
③掛掉一個(gè)節(jié)點(diǎn),沒關(guān)系,還有其他節(jié)點(diǎn)可以備份;甚至,掛掉某一個(gè)機(jī)架,也沒關(guān)系;其他機(jī)架上,也有備份。
2.讀流程
例:
讀操作就簡(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上讀取;
七、HDFS文件權(quán)限
1.與linux系統(tǒng)文件權(quán)限類似
r:read w:write x:execute 權(quán)限x對(duì)于文件忽略,對(duì)于文件夾表示是否允許訪問
2.如果linux系統(tǒng)用戶zhangsan使用hadoop命令創(chuàng)建一個(gè)文件 ,那么該文件在HDFS中的所有者就是zhangsan。
3.HDFS權(quán)限的目:阻止好人做錯(cuò)事,而不是阻止壞人做壞事;例:只要是zhangsan上傳的文件,那HDFS就認(rèn)為這個(gè)文件屬于張三,當(dāng)下次過來操作的還是zhangsan那就可以操作,而不需要密碼驗(yàn)證之類的操作。
八、安全模式
在NameNode啟動(dòng)以后會(huì)一段時(shí)間是處于安全模式,在安全模式下只可查看不能修進(jìn)行其他操作,因?yàn)樵诎踩J较翹N和DN需要做很多工作;
1.NN 啟動(dòng)的時(shí)候首先需要將fsimage 載入內(nèi)存,并執(zhí)行編輯日志中的各項(xiàng)操作。
2.一旦在文件系統(tǒng)中建立了一個(gè)新的元數(shù)據(jù)的映射,則創(chuàng)建一個(gè)新的fsimage 文件(與SNN配合)和一個(gè)空的edits文件
3.安全模式下的NameNode,對(duì)客戶端是只讀的(顯示文件目錄、內(nèi)容等 ,其他的刪除、修改、重命名操作都會(huì)失敗)
4.在安全模式下,NameNode會(huì)收集來自DataNode匯報(bào)的block的信息,如果DN匯報(bào)的block的最副本數(shù)大于設(shè)置的最小副本數(shù),則會(huì)認(rèn)為是“安全”的。
如果有block的副本數(shù)沒有達(dá)到設(shè)置的最小副本數(shù),則該block會(huì)被復(fù)制直到達(dá)到設(shè)置的最小副本數(shù)為止。
總結(jié)
以上所述是小編給大家介紹的Hadoop 分布式存儲(chǔ)系統(tǒng) HDFS的實(shí)例詳解,希望對(duì)大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的!
您可能感興趣的文章:- Hadoop源碼分析三啟動(dòng)及腳本剖析
- Hadoop源碼分析二安裝配置過程詳解
- Python API 操作Hadoop hdfs詳解
- Hadoop源碼分析五hdfs架構(gòu)原理剖析