大數(shù)據(jù)學(xué)習(xí)十一:HDFS框架

1、HDFS(Hadoop Distributed File System) 分布式文件存儲(chǔ)系統(tǒng),批處理、高吞吐量而非低延遲。它只支持文件追加和刪除(一次寫多次讀),應(yīng)用距離數(shù)據(jù)越近,操作速度越快。

2、HDFS三大守護(hù)進(jìn)程(deamon processe)

? ? NameNode :?

? ? A:NameNode是HDFS的命名空間,里面存儲(chǔ)著整個(gè)HDFS的所有文件的元數(shù)據(jù)信息,這些信息都會(huì)加載到內(nèi)存中,元數(shù)據(jù)信息分為兩部分,第一部分是文件系統(tǒng)樹及整棵樹內(nèi)所有的文件和目錄,第二部分是每個(gè)文件的各個(gè)組成塊所在的數(shù)據(jù)節(jié)點(diǎn)信息。第一部分會(huì)落地形成文件(命名空間鏡像文件和編輯日志文件)永久保存,第二部分的信息是在HDFS啟動(dòng)時(shí),DataNode自動(dòng)報(bào)送給NameNode,所以這個(gè)不會(huì)永久保存。元數(shù)據(jù)格式如下(/test/a.log是在hdfs文件系統(tǒng)中的路徑,3是這個(gè)文件的副本數(shù)(副本數(shù)可以通過在配置文件中的配置來(lái)修改的)。在hdfs中,文件是進(jìn)行分塊存儲(chǔ)的,如果文件過大,就要分成多塊存儲(chǔ),每個(gè)塊在文件系統(tǒng)中存儲(chǔ)3個(gè)副本,以上圖為例,就是分成blk_1和blk_2兩個(gè)塊,每個(gè)塊在實(shí)際的節(jié)點(diǎn)中有3個(gè)副本,比如blk_1的3個(gè)副本分別存儲(chǔ)在h0,h1,h3中)


?此時(shí)存在一個(gè)問題,隨著文件數(shù)目的增加,NameNode存在內(nèi)存中的信息也越來(lái)越大,如何保證內(nèi)存不溢出?

? ? DataNode :?

? ? 負(fù)責(zé)存儲(chǔ)數(shù)據(jù),最小的單位是block , 默認(rèn)的bocksize=128M , 若文件258M,則共有block=3,實(shí)際占有存儲(chǔ)258M,最后一塊 ? ? 只占用2M。每個(gè)DataNode最多存儲(chǔ)的塊數(shù)=(repication-1)/ (機(jī)架數(shù)+2),放置位置隨機(jī)。

? ? ?每隔3秒向NameNode發(fā)一次心跳,每隔dfs.blockreport.intervalMsec=6h(默然單位ms)向NameNode發(fā)送一次blockReport,

? ? ?心跳:DataNode向NameNode報(bào)告自身信息,如DataNode容量,DataNode DFS容量等,然后NameNode向DataNode返 ? ? ? ? ? ? ? ?回DataNode Command,控制DataNode進(jìn)行一些操作。

? ? ?dfs.heartbeat.interval = 3s ? ? , ? ? ? ??heartbeat.recheck.interval = 300000ms (重新檢查時(shí)間)

? ? ?與DataNode連接超時(shí)時(shí)間= heartbeat*10 + recheck*2,

sendHeartbeat的具體實(shí)現(xiàn):

1. 首先從datanodeMap中獲取發(fā)送“心跳”的datanodeDescriptor。在獲取的過程中,如果datanodeMap獲取的Datanode的hostname與正在發(fā)送“心跳”的Datanode的hostname不一致,則拋出異常,并向該Datanode返回DNA_REGISTER 命令。

2. 如果從datanodeMap中獲取的DatanodeDescriptor不為空,但是該Datanode的是需要shutdown的節(jié)點(diǎn),則將該節(jié)點(diǎn)置為dead。

3. 如果獲取的DatanodeDescriptor為空,或者DataNodeDescriptor的狀態(tài)為not live,則向并向該Datanode返回DNA_REGISTER 命令。

4. 如果DatanodeDescriptor正常,則更新FSNamespace以及DatanodeDescriptor的狀態(tài),主要包括capacity、dfsUsed、remaining和xceiverCount。

5. 然后,依次獲取DNA_RECOVERBLOCK 、DNA_TRANSFER、DNA_INVALIDATE、KeyUpdateCommand、BalancerBandwidthCommand執(zhí)行命令返回給Datanode。

6. 最后,判斷是不是有UpgradeCommand命令,如果有返回給Datanode進(jìn)行執(zhí)行。

? ? 追加內(nèi)容后塊的變化,怎么追加,怎么重新設(shè)置塊大小和replication數(shù)目。

? SecondaryNameNode :?


fsimage : 存儲(chǔ)NameNode元數(shù)據(jù)的鏡像文件

edits : 存儲(chǔ)NameNode的操作日志

fstime : 保存最近一次的checkpoint時(shí)間 , checkpoint為fstime和edits文件的合并時(shí)間點(diǎn)

檢查點(diǎn):core-site.xml ?fs.checkpoint.period=3600(s) 或者 fs.checkpoint.size=64(M) (edits文件)

(1)檢查點(diǎn)到來(lái)時(shí),NameNode 生成edits.new文件記錄新的操作日志(元數(shù)據(jù)操作),

(2)原edits文件和fsimage文件下載到本地,在內(nèi)存中合并為fsimage.ckpt文件

(3)DataNode通知NameNode文件fsimage.ckpt已生成,NameNode下載fsimage.ckpt,并替換為fsimage

(4)edit.new文件替換為edit文件

如何恢復(fù)NameNode


HDFS架構(gòu)總圖


(1) Client與NameNode通信,NameNode獲取數(shù)據(jù)信息,供Client進(jìn)行讀寫操作。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容