全部產品
Search
文件中心

E-MapReduce:JVM記憶體調優

更新時間:Jul 01, 2024

本文為您介紹如何調整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_heapsizehadoop_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,0002048
    2,000,0004096
    5,000,00010240
    說明 該建議值已為JVM核心預留了部分空間,以及為作業高峰壓力預留了部分空間,因此通常情況下可以直接換算使用。