本文為您介紹如何調整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核心預留了部分空間,以及為作業高峰壓力預留了部分空間,因此通常情況下可以直接換算使用。