本文為您介紹如何調整NameNode JVM和DataNode JVM內存大小,以便優化HDFS的穩定性。
調整NameNode JVM內存大小
背景:在HDFS中,每個文件對象都需要在NameNode中記錄元數據信息,并占用一定的內存空間。默認的JVM配置可以滿足部分普通的HDFS使用。部分Workload會向HDFS中寫入更多的文件, 或者隨著一段時間的積累HDFS保存的文件數不斷增加,當增加的文件數超過默認的內存空間配置時,則默認的內存空間無法存儲相應的信息,您需要修改內存大小的設置。
建議:修改NameNode JVM內存大小。修改方式如下:
HA集群
您可以在EMR控制臺的HDFS服務的配置頁面,在搜索區域,搜索參數hadoop_namenode_heapsize,參數值根據實際需求進行調整。
非HA集群
您可以在EMR控制臺的HDFS服務的配置頁面,在搜索區域,搜索參數hadoop_namenode_heapsize和hadoop_secondary_namenode_heapsize,參數值根據實際需求進行調整。
說明配置完成后,需要重啟相應的NameNode或SecondaryNamenode服務,使得配置生效。
您可以通過訪問HDFS UI頁面,查看文件數Files和文件塊數Blocks,訪問Web UI的詳情信息,請參見訪問鏈接與端口。您可以根據以下計算方法調整NameNode JVM內存大小。
建議值=( 文件數(以百萬為單位)+塊數(以百萬為單位))×512 MB
例如,您有1000萬個文件,都是中小文件且不超過1個Block,Blocks數量也為1000萬,則內存大小建議值為10240 MB,即(10+10)×512 MB。
當您的大多數文件不超過1個Block時,建議值如下。
文件數量
建議值(MB)
10,000,000
10240
20,000,000
20480
50,000,000
51200
100,000,000
102400
調整DataNode JVM內存大小
- 背景:在HDFS中,每個文件Block對象都需要在DataNode中記錄Block元數據信息,并占用一定的內存空間。默認的JVM配置可以滿足部分簡單的、壓力不大的作業需求。而部分作業會向HDFS寫入更多的文件, 或者隨著一段時間的積累HDFS保存的文件數不斷增加。當文件數增加,DataNode上的Block數也會增加,而默認的內存空間無法存儲相應的信息時,則需要修改內存大小的設置。
- 建議:您可以在EMR控制臺的HDFS服務的配置頁面,在搜索區域,搜索參數hadoop_datanode_heapsize,參數值根據實際需求進行調整,以修改DataNode JVM內存大小。您可以根據以下計算方法調整DataNode JVM內存大小。
集群中每個DataNode實例平均保存的副本數Replicas=文件塊數Blocks×3÷DataNode節點數 建議值=單個DataNode副本數Replicas(百萬單位)×2048 MB
說明 配置完成后,需重啟DataNode服務,使配置生效。例如,大數據機型為3副本,Core節點數量為6,如果您有1000萬個文件且都是中小文件,Blocks數量也為1000萬,則單個DataNode副本數Replicas為 500萬(1000萬×3÷6), 內存大小建議值為10240 MB(5×2048 MB)。
當您的大多數文件不超過1個Block時,建議值如下。單個DataNode實例平均Replicas數量 建議值(MB) 1,000,000 2048 2,000,000 4096 5,000,000 10240 說明 該建議值已為JVM內核預留了部分空間,以及為作業高峰壓力預留了部分空間,因此通常情況下可以直接換算使用。