HDFS學習(三) – Namenode and Datanode


 個人小站,正在持續整理中,歡迎訪問:http://shitouer.cn

博文有更新並添加了新的內容,詳細請訪問:HDFS學習(三) – Namenode and Datanode

  HDFS集群以Master-Slave模式運行,主要有兩類節點:一個Namenode(即Master)和多個Datanode(即Slave)。

  HDFS Architecture:

Namenode

 

 

  Namenode 管理者文件系統的Namespace。它維護着文件系統樹(filesystem tree)以及文件樹中所有的文件和文件夾的元數據(metadata)。管理這些信息的文件有兩個,分別是Namespace 鏡像文件(Namespace image)和操作日志文件(edit log),這些信息被Cache在RAM中,當然,這兩個文件也會被持久化存儲在本地硬盤。Namenode記錄着每個文件中各個塊所在的數據節點的位置信息,但是他並不持久化存儲這些信息,因為這些信息會在系統啟動時從數據節點重建。

  Namenode結構圖課抽象為如圖:

 

  客戶端(client)代表用戶與namenode和datanode交互來訪問整個文件系統。客戶端提供了一些列的文件系統接口,因此我們在編程時,幾乎無須知道datanode和namenode,即可完成我們所需要的功能。

Datanode

  Datanode是文件系統的工作節點,他們根據客戶端或者是namenode的調度存儲和檢索數據,並且定期向namenode發送他們所存儲的塊(block)的列表。

Namenode容錯機制

  沒有Namenode,HDFS就不能工作。事實上,如果運行namenode的機器壞掉的話,系統中的文件將會完全丟失,因為沒有其他方法能夠將位於不同datanode上的文件塊(blocks)重建文件。因此,namenode的容錯機制非常重要,Hadoop提供了兩種機制。

  第一種方式是將持久化存儲在本地硬盤的文件系統元數據備份。Hadoop可以通過配置來讓Namenode將他的持久化狀態文件寫到不同的文件系統中。這種寫操作是同步並且是原子化的。比較常見的配置是在將持久化狀態寫到本地硬盤的同時,也寫入到一個遠程掛載的網絡文件系統。

  第二種方式是運行一個輔助的Namenode(Secondary Namenode)。 事實上Secondary Namenode並不能被用作Namenode它的主要作用是定期的將Namespace鏡像與操作日志文件(edit log)合並,以防止操作日志文件(edit log)變得過大。通常,Secondary Namenode 運行在一個單獨的物理機上,因為合並操作需要占用大量的CPU時間以及和Namenode相當的內存。輔助Namenode保存着合並后的Namespace鏡像的一個備份,萬一哪天Namenode宕機了,這個備份就可以用上了。

  但是輔助Namenode總是落后於主Namenode,所以在Namenode宕機時,數據丟失是不可避免的。在這種情況下,一般的,要結合第一種方式中提到的遠程掛載的網絡文件系統(NFS)中的Namenode的元數據文件來使用,把NFS中的Namenode元數據文件,拷貝到輔助Namenode,並把輔助Namenode作為主Namenode來運行。

  更多有關Hadoop HA的介紹,可以參見HDFS學習(四) – HDFS Federation

 

 

HDFS系列文章:

HDFS學習(一) – HDFS設計

HDFS學習(二) – HDFS Block介紹

HDFS學習(三) – Namenode and Datanode

HDFS學習(四) – HDFS Federation

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM