天天看點

HDFS namenode(1)1.概述2.記憶體全景3. 記憶體分析

HDFS NameNode記憶體全景(美團技術團隊)

1.概述

NameNode

管理着整個

HDFS

檔案系統的中繼資料。從架構設計上看,中繼資料大緻分成兩個層次:

  • Namespace管理層

    : 負責管理檔案系統中的樹狀目錄結構以及檔案與資料塊的映射關系;
  • 塊管理層

    : 負責管理檔案系統中檔案的實體塊與實際存儲位置的映射關系BlocksMap。
  1. Namespace

    管理的中繼資料除記憶體常駐外,也會周期Flush到持久化裝置上

    FsImage

    檔案
  2. BlocksMap

    中繼資料隻在記憶體中存在

當NameNode發生重新開機,首先從持久化裝置中讀取FsImage建構Namespace,之後根據DataNode的彙報資訊重新構造BlocksMap。

這兩部分資料結構是占據了NameNode大部分JVM Heap空間。

除了對檔案系統本身中繼資料的管理之外,NameNode還需要維護整個叢集的機架及DataNode的資訊、Lease管理以及集中式緩存引入的緩存管理等等。這幾部分資料結構空間占用相對固定,且占用較小。

測試資料顯示,Namespace目錄和檔案總量到2億,資料塊總量到3億後,常駐記憶體使用量超過90GB。

2.記憶體全景

HDFS namenode(1)1.概述2.記憶體全景3. 記憶體分析

如前述,NameNode整個記憶體結構大緻可以分成四大部分:

  • Namespace
  • BlocksMap
  • NetworkTopology
  • 其它

Namespace:維護整個檔案系統的目錄樹結構及目錄樹上的狀态變化; BlockManager:維護整個檔案系統中與資料塊相關的資訊及資料塊的狀态變化; NetworkTopology:維護機架拓撲及DataNode資訊,機架感覺的基礎; 其它: LeaseManager:讀寫的互斥同步就是靠Lease實作,支援HDFS的Write-Once-Read-Many的核心資料結構; CacheManager:Hadoop 2.3.0引入的集中式緩存新特性,支援集中式緩存的管理,實作memory-locality提升讀性能; SnapshotManager:Hadoop 2.1.0引入的Snapshot新特性,用于資料備份、復原,以防止因使用者誤操作導緻叢集出現資料問題; DelegationTokenSecretManager:管理HDFS的安全通路; 另外還有臨時資料資訊、統計資訊metrics等等。

NameNode

常駐記憶體主要被

Namespace

BlockManager

使用,二者使用占比分别接近50%。其它部分記憶體開銷較小且相對固定,與Namespace和BlockManager相比基本可以忽略。

3. 記憶體分析

3.1 Namespace

與單機檔案系統相似,HDFS對檔案系統的目錄結構也是按照樹狀結構維護,Namespace儲存了目錄樹及每個目錄/檔案節點的屬性。除在記憶體常駐外,這部分資料會定期flush到持久化裝置上,生成一個新的FsImage檔案,友善NameNode發生重新開機時,從FsImage及時恢複整個Namespace。圖3所示為Namespace記憶體結構。前述叢集中目錄和檔案總量即整個Namespace目錄樹中包含的節點總數,可見Namespace本身其實是一棵非常巨大的樹。

圖1:namespace

HDFS namenode(1)1.概述2.記憶體全景3. 記憶體分析

在整個Namespace目錄樹中存在兩種不同類型的INode資料結構:INodeDirectory和INodeFile。其中INodeDirectory辨別的是目錄樹中的目錄,INodeFile辨別的是目錄樹中的檔案。由于二者均繼承自INode,是以具備大部分相同的公共資訊INodeWithAdditionalFields,除常用基礎屬性外,其中還提供了擴充屬性features,如Quota、Snapshot等均通過Feature增加,如果以後出現新屬性也可通過Feature友善擴充。不同的是,INodeFile特有的辨別副本數和資料塊大小組合的header(2.6.1之後又新增了辨別存儲政策ID的資訊)及該檔案包含的有序Blocks數組;INodeDirectory則特有子節點的清單children。這裡需要特别說明children是預設大小為5的ArrayList,按照子節點name有序存儲,雖然在插入時會損失一部分寫性能,但是可以友善後續快速二分查找提高讀性能,對一般存儲系統,讀操作比寫操作占比要高。具體的繼承關系見圖4所示。