HDFS原理了解 (學習筆記)

HDFS簡介

HDFS:Hadoop Distributed File System(hadoop分佈式文件系統)
分佈式,感覺好厲害的樣子啊,有網絡文件系統,有本地文件系統,現在又多了一個分佈式的文件系統。之所以是要分佈式,是數據要放到多個主機上面去。放的東西在集羣中,就是分佈式啦!
想要了解這個東東,先找一張原理圖瞅瞅。

HDFS整體處理流程圖
看不懂沒關係,繼續往下瞅就是了。

HDFS 1.0

每個一學習的模塊要搞懂一個點內容,學完這個就需要對下面這些名詞非常的瞭解。 Namenode Datanode
冷備份(sendarynamenode)

Namenode

namenode又稱爲名稱節點,是負責管理分佈式文件系統的命名空間(Namespace),保存了兩個核心的數據結構,即FsImage和EditLog。 你可以把它理解成大管家,它不負責存儲具體的數據。

  • FsImage用於維護文件系統樹以及文件樹中所有的文件和文件夾的元數據
  • 操作日誌文件EditLog中記錄了所有針對文件的創建、刪除、重命名等操作
    注意,這個兩個都是文件,也會加載解析到內存中。

爲啥會拆成兩個呢? 主要是因爲fsimage這個文件會很大的,多了之後就不好操作了,就拆分成兩個。把後續增量的修改放到EditLog中, 一個FsImage和一個Editlog 進行合併會得到一個新的FsImage.

因爲它是系統的大管家,如果這個玩意壞了,丟失了怎麼辦。就相當於你係統的引導區壞了。那就玩完了。整個文件系統就崩潰了。 所以,這個重要的東西,需要備份。這個時候就產生了一個叫sendaryNamenode的節點用來做備份,它會定期的和namenode就行通信來完成整個的備份操作。具體的操作如下:

HDFS HA 原理圖

SecondaryNameNode的工作情況:
1. SecondaryNameNode會定期和NameNode通信,請求其停止使用EditLog文件,暫時將新的寫操作寫到一個新的文件edit.new上來,這個操作是瞬間完成,上層寫日誌的函數完全感覺不到差別;
2. SecondaryNameNode通過HTTP GET方式從NameNode上獲取到FsImage和EditLog文件,並下載到本地的相應目錄下;
3. SecondaryNameNode將下載下來的FsImage載入到內存,然後一條一條地執行EditLog文件中的各項更新操作,使得內存中的FsImage保持最新;這個過程就是EditLog和FsImage文件合併;
4. SecondaryNameNode執行完(3)操作之後,會通過post方式將新的FsImage文件發送到NameNode節點上
5. NameNode將從SecondaryNameNode接收到的新的FsImage替換舊的FsImage文件,同時將edit.new替換EditLog文件,通過這個過程EditLog就變小了

除了這個自帶的備份操作,還需要進行人工的備份,把一份fsimage到多個地方進行備份,萬一namenode的節點壞了呢。

DataNode

datanode數據節點,用來具體的存儲文件,維護了blockId 與 datanode本地文件的映射。 需要不斷的與namenode節點通信,來告知其自己的信息,方便nameode來管控整個系統。

這裏還提到一個的概念,就想linux本地文件系統中也有塊的概念一樣,這裏也有塊的概念。這裏的塊會默認是128m 每個塊都會默認儲存三份

HDFS 2.0

有問題,就得改。1.0上有很多的毛病,爲了修復這些問題纔出了2.0
* 單點故障問題
* 不可以水平擴展(是否可以通過縱向擴展來解決?)
* 系統整體性能受限於單個名稱節點的吞吐量
* 單個名稱節點難以提供不同程序之間的隔離性
* HDFS HA是熱備份,提供高可用性,但是無法解決可擴展性、系統性能和隔離性

解決上面這些問題所使用的手段就是 熱備份 federation

熱備份 (HDFS HA)

  • HDFS HA(High Availability)是爲了解決單點故障問題
  • HA集羣設置兩個名稱節點,“活躍(Active)”和“待命(Standby)”
  • 兩種名稱節點的狀態同步,可以藉助於一個共享存儲系統來實現
  • 一旦活躍名稱節點出現故障,就可以立即切換到待命名稱節點
  • Zookeeper確保一個名稱節點在對外服務
  • 名稱節點維護映射信息,數據節點同時向兩個名稱節點彙報信息

HDFS HA 原理圖

Federation(大概翻譯成聯盟)

多個命名空間。爲了處理一個namenode的侷限性,搞了幾個namanode大家一起來管理。就像編程中的命名空間一樣

HDFS Federation 原理圖

  • 在HDFS Federation中,設計了多個相互獨立的名稱節點,使得HDFS的命名服務能夠水平擴展,這些名稱節點分別進行各自命名空間和塊的管理,相互之間是聯盟(Federation)關係,不需要彼此協調。並且向後兼容
  • HDFS Federation中,所有名稱節點會共享底層的數據節點存儲資源,數據節點向所有名稱節點彙報
  • 屬於同一個命名空間的塊構成一個“塊池

HDFS Federation設計可解決單名稱節點存在的以下幾個問題:
1. HDFS集羣擴展性。多個名稱節點各自分管一部分目錄,使得一個集羣可以擴展到更多節點,不再像HDFS1.0中那樣由於內存的限制制約文件存儲數目
2. 性能更高效。多個名稱節點管理不同的數據,且同時對外提供服務,將爲用戶提供更高的讀寫吞吐率
3. 良好的隔離性。用戶可根據需要將不同業務數據交由不同名稱節點管理,這樣不同業務之間影響很小

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