Hadoop的NameNode和SecondaryNameNode的功能描述

弄明白了雲計算和大數據以及hadoop的概念,思想交給哲學家,我們來研究一下技術實現

hadoop這個傢伙是怎麼個構造?怎麼實現的大數據存儲?怎麼實現的大數據計算?

首先我們來看構造NameNode和SecondaryNameNode,這倆是hadoop的管理者,

我們來主要研究下這倆小兄弟都做了什麼工作?

舉例說明:現在我要使用hadoop存儲一個640M的數據,hadoop會將這個數據進行拆分,拆分成10份,每一份64M(當然這個64不是固定的可以通過配置文件進行更改)

然後將這10份數(我們起名字D1-D10)據存儲到DataNode上。

假設有DataNode1存儲了D1,DataNode2存儲了D1,D1,D2(爲什麼出來兩個D1兩個D2  這是HDFS的特點,數據備份,防止DataNode1損壞數據丟失)DataNode3存儲了D2,D2,D3.

那麼以上這些信息都會被存儲到NameNode中。NameNode怎麼知道哪一個DataNode保存了哪一些block?是DataNode啓動的時候向NameNode彙報的。

這個地方要說一些NameNode與DataNode的關係,他們是一種主從結構的關係,他們之間是通過心跳建立鏈接互通數據的。一旦心跳鏈接斷開(一方得不到另一方發來的信息,一般是指NameNode得不到DataNode發來的信息),表示DataNode死亡。每一次心跳DataNode都會把我這個數據節點新增的block,待移除的block,無效的block,損壞的block,正在處理的block等信息傳遞到NameNode並得到NameNode的一個反饋完成此次心跳鏈接。

那麼NameNode拿到這些信息後,存儲到哪裏呢?這裏就要說到NameNode的兩個重要文件

fsimage元數據鏡像文件(說白了就是備份)

edits 元數據操作文件(說白了就是日誌)

我們都知道備份是有實踐點的,而日誌會記錄下系統當前最新的操作。所以有了備份和日誌,實際上你就可以確保數據在損壞時最新的狀態。這個時候你可能會說,那是不是要定時的去把備份更新一下啊,不然日誌文件越來越大,備份的數據也會越來越古老。對的!!!應該是有這個操作,而且這個操作必須是個任務,每隔一定的時間就將日誌中的變更同步到備份中。

那誰來做這個操作呢?你或許會說肯定是NameNode啊,這倆文件都在這上面!!!但是不是的,因爲NameNode的主要工作還是對DataNode的管理,或者說給用戶提供操作數據訪問數據的服務!哪還有閒工夫管備份,忙都忙死了...

這個時候,SecondaryNameNode就出現了,這個小夥子就是幫助NameNode根據日誌同步備份的。

也就是說SecondaryNameNode會定時的根據edits文件更新fsimage文件。也正是由於這份工作的特殊性,一旦NameNode死磕了,SecondaryNameNode會立馬變身成爲NameNode,保證系統正常運行。

 

就說這麼多,沒什麼概念,就是描述一下自己的理解。實際上軟件開發很難用概念去描述。網上技術博客很多,寫的也比這詳細的多,關鍵是理解,希望我上面的描述對你形成自己的理解有一定的幫助。我暫時就理解到這個程度。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章