本地手機網(wǎng)站建設灰色行業(yè)推廣平臺
NN和2NN的內(nèi)部工作原理
對于NameNode的存放位置:
內(nèi)存中:好處:計算快
壞處:可靠性差,斷電后元數(shù)據(jù)會丟失
磁盤中:好處:可靠性搞
壞處:計算慢
內(nèi)存+磁盤中:效率低
所以設置在磁盤中的備份元數(shù)據(jù)的鏡像文件FsImage(只存儲數(shù)據(jù)),但元數(shù)據(jù)更新時需要同時更新FsImage,否則會產(chǎn)生數(shù)據(jù)一致性的問題,且斷電后元數(shù)據(jù)會丟失。
引入Edits日志文件(只進行追加操作)。每當元數(shù)據(jù)有更新或者添加元數(shù)據(jù)時,修改內(nèi)存中的元數(shù)據(jù)并追加到Edits中。一旦NameNode節(jié)點斷電,通過FsImage和Edits的合并元數(shù)據(jù)。
引入一個新的節(jié)點SecondaryNamenode,專門用于定期合并FsImage和Edits。
綜上,NameNode存放于內(nèi)存中,FsImage和Edits存放與磁盤中,SecondaryNamenode定期合并FsImage和Edits,當開機時加載FsImage和Edits到NameNode。
1.第一階段:NameNode啟動
(1)第一次啟動NameNode格式化后,創(chuàng)建Fsimage鏡像文件和Edits日志文件。如果不是第一次啟動,直接加載編輯日志和鏡像文件到內(nèi)存。
(2)客戶端對元數(shù)據(jù)進行增刪改的請求。
(3)NameNode記錄操作日志,更新滾動日志。(先記錄日志再更改內(nèi)存,如果先更改內(nèi)存再記錄,在更改內(nèi)存后遇到斷電,則不會記錄此次更改的記錄,導致內(nèi)存丟失)
(4)NameNode在內(nèi)存中對元數(shù)據(jù)進行增刪改。
2.第二階段:Secondary NameNode工作
(1)Secondary NameNode詢問NameNode是否需要CheckPoint(觸發(fā)條件,定時器到期;Edits日志文件數(shù)據(jù)滿)。直接帶回NameNode是否檢查結果。
(2)Secondary NameNode請求執(zhí)行CheckPoint。
(3)NameNode滾動正在寫入Edits日志。
(4)將滾動前的編輯日志和鏡像文件拷貝到Secondary NameNode。
(5)Secondary NameNode加載編輯日志和鏡像文件到內(nèi)存,并合并。
(6)加載后Secondary NameNode生成新的鏡像文件fsimage.chkpoint。
(7)Secondary NameNode拷貝fsimage.chkpoint到NameNode。
(8)NameNode將fsimage.chkpoint重新命名成fsimage。
DataNode工作機制
(1)DataNode主動向NameNode匯報自己的塊信息。
(2)NameNode則記錄下 有哪些塊是正常的,并向DataNode發(fā)送注冊成功。
(3)DataNode每隔一個周期(6h)向NameNode匯報所有塊的信息,保證數(shù)據(jù)的可靠性。
(4)DataNode和NameNode有周期性(3s)的互通信息,確保DataNode還是活動狀態(tài)。
(5)若一定的時間NameNode沒有收到DataNode信息,則任務該節(jié)點不可用(即NameNode不允許客戶端向DataNode讀寫數(shù)據(jù))。
數(shù)據(jù)的完整性
Hadoop使用crc校驗位進行數(shù)據(jù)一致性校驗,先對原始數(shù)據(jù)進行crc計算,然后與傳輸過來的crc校驗位比較是否一致。