すべてのプロダクト
Search
ドキュメントセンター

E-MapReduce:JVMメモリチューニング

最終更新日:Jan 11, 2025

このトピックでは、NameNodeとDataNodeのJava仮想マシン(JVM)のメモリサイズを調整して、Hadoop Distributed File System(HDFS)サービスの安定性を向上させる方法について説明します。

NameNodeのJVMのメモリサイズを調整する

  • 背景情報:HDFSでは、NameNodeは各ファイルのメタデータを記録します。メタデータは特定量のメモリ領域を占有します。デフォルトのJVMメモリ構成は、HDFSの一般的な要件を満たすことができます。場合によっては、より多くのファイルがHDFSに書き込まれ、HDFSに保存されているファイルの数が継続的に増加します。新しく書き込まれたファイルの数がデフォルトのJVMメモリ構成を超えると、これらのファイルを保存できません。この場合、メモリサイズを変更する必要があります。

  • 推奨事項:NameNodeのJVMのメモリサイズを変更します。次の操作を実行できます。

    • 高可用性(HA)クラスター

      E-MapReduce(EMR)コンソールにログインします。HDFSサービスを変更するクラスターを見つけ、[アクション] 列の [サービス] をクリックします。[サービス] タブで、HDFSサービスを見つけて [構成] をクリックします。HDFSサービスページの [構成] タブで、hadoop_namenode_heapsize パラメーターを検索し、ビジネス要件に基づいてこのパラメーターの値を変更します。

    • 非HAクラスター

      EMRコンソールにログインします。HDFSサービスを変更するクラスターを見つけ、[アクション] 列の [サービス] をクリックします。[サービス] タブで、HDFSサービスを見つけて [構成] をクリックします。HDFSサービスページの [構成] タブで、hadoop_namenode_heapsize パラメーターと hadoop_secondary_namenode_heapsize パラメーターを検索し、ビジネス要件に基づいてパラメーターの値を変更します。

      説明

      構成が完了したら、構成を有効にするためにNameNodeまたはセカンダリNameNodeを再起動する必要があります。

    HDFSのWebユーザーインターフェース(UI)で、ファイルの数とデータブロックの数を確認できます。詳細については、「オープンソースコンポーネントのWeb UIへのアクセス」をご参照ください。次の式を使用して、NameNodeのJVMのメモリサイズを計算できます。

    Recommended memory size = (Number of files, measured in millions + Number of data blocks, measured in millions) × 512 MB

    たとえば、1,000万個のファイルがあり、すべてが中小規模のファイルであり、各ファイルのサイズはブロックのサイズを超えていません。したがって、ブロックの数も1,000万です。この例では、推奨メモリサイズは 10,240 MB で、次の式を使用して計算されます。(10 + 10)× 512 MB。

    次の表は、ファイルの数と推奨メモリサイズの対応を示しています。ほとんどのファイルのサイズは、ブロックのサイズを超えていません。

    ファイルの数

    推奨メモリサイズ(MB)

    10,000,000

    10,240

    20,000,000

    20,480

    50,000,000

    51,200

    100,000,000

    102,400

各DataNodeのJVMのメモリサイズを調整する

  • 背景情報:HDFSでは、DataNodeはデータブロックのメタデータを記録します。メタデータは特定量のメモリ領域を占有します。デフォルトのJVMメモリ構成は、HDFSの一般的な要件を満たすことができます。場合によっては、より多くのファイルがHDFSに書き込まれ、HDFSに保存されているファイルの数が継続的に増加します。DataNodeのブロック数は、ファイルの数によって異なります。新しく書き込まれたファイルの数がデフォルトのメモリ領域構成を超えると、これらのファイルを保存できません。この場合、メモリサイズを変更する必要があります。
  • 推奨事項:EMRコンソールのHDFSサービスページの [構成] タブに移動します。[構成フィルター] セクションで hadoop_datanode_heapsize パラメーターを検索し、ビジネス要件に基づいてこのパラメーターの値を変更します。
    次の式を使用して、各DataNodeのJVMのメモリサイズを計算できます。
    Number of replicas per DataNode in an EMR cluster = Number of data blocks × 3/Number of DataNodes
    Recommended memory size = Number of replicas per DataNode, measured in millions × 2048 MB
    説明 構成が完了したら、構成を適用するためにDataNodeを再起動する必要があります。

    たとえば、EMRクラスターのHDFSが3重ストレージを提供し、EMRクラスターにデプロイされたElastic Compute Service(ECS)インスタンスがビッグデータインスタンスファミリーに属し、コアノードの数が 6 であるとします。1,000万個のファイルがあり、すべてのファイルが中小規模のファイルであるためデータブロックの数も1,000万個の場合、DataNodeあたりのレプリカ数は 5,000,000 で、次の式を使用して計算されます。(10,000,000 × 3/6)。推奨メモリサイズは 10,240 MB で、次の式を使用して計算されます。5 × 2048 MB。

    次の表は、DataNodeあたりのレプリカ数と推奨メモリサイズの対応を示しています。ほとんどのファイルのサイズは、ブロックのサイズを超えていません。
    DataNodeあたりのレプリカ数推奨メモリサイズ(MB)
    1,000,0002048
    2,000,0004096
    5,000,00010240
    説明 推奨値には、JVMカーネルのメモリ領域と、ピーク時にジョブを実行するためのメモリ領域が含まれています。通常の状況では、推奨値を直接使用できます。