EMR バージョン 3.49.0 および 5.15.0 以降では、EMR はクラスターの作成中に、選択されたインスタンスタイプとサービスに基づいて、コンポーネントのデフォルトのメモリ設定を動的に調整します。この動作は、以前のバージョンで使用されていた静的なデフォルト構成を置き換えるものです。このトピックでは、YARN コンポーネントのヒープメモリサイズを設定する方法と、YARN リソース構成の使用方法について説明します。
EMR クラスターの初期化後、YARN コンポーネントに割り当てられたメモリが小さすぎる場合は、クラスターにデプロイされているサービスが多すぎないか確認してください。EMR は、クラスターにデプロイされているサービスに基づいてリソースを割り当てます。クラスターに多くのサービスをデプロイすると、YARN コンポーネントに割り当てられるメモリリソースが減少する可能性があります。さらに、ノードグループ内の Elastic Compute Service (ECS) インスタンスの仕様が低すぎて、EMR クラスターにデプロイされているサービスのメモリ要件を満たせないかどうかも確認できます。
EMR クラスターの作成後、EMR コンソールで YARN コンポーネントのパラメーター設定を調整できます。
YARN コンポーネントのヒープメモリサイズの設定
EMR コンソールの YARN サービスページの [設定] タブで、パラメーターを設定します。次の表にパラメーターを示します。
コンポーネント名 | 設定ファイル | パラメーター | 有効範囲 | 備考 |
ResourceManager | yarn-env.sh | YARN_RESOURCEMANAGER_HEAPSIZE | クラスターレベル | 最小値は 1024 です。small なジョブが多数存在する場合は、ヒープメモリサイズを増やすことができます。ヒープメモリサイズを増やす場合は、ResourceManager コンポーネントを再起動して変更を有効にする必要があります。 |
NodeManager | yarn-env.sh | YARN_NODEMANAGER_HEAPSIZE | クラスターレベル | Shuffle Service コンポーネントが NodeManager コンポーネントの大量のメモリを占有しているためにフルガベージコレクション(GC)が発生する場合は、ヒープメモリサイズを増やすことができます。ヒープメモリサイズを増やす場合は、NodeManager コンポーネントを再起動して変更を有効にする必要があります。 |
WebAppProxyServer | yarn-env.sh | YARN_PROXYSERVER_HEAPSIZE | クラスターレベル | このパラメーターの値を調整する場合は、WebAppProxyServer コンポーネントを再起動して変更を有効にする必要があります。 |
TimelineServer | yarn-env.sh | YARN_TIMELINESERVER_HEAPSIZE | クラスターレベル | このパラメーターの値を調整する場合は、TimelineServer コンポーネントを再起動して変更を有効にする必要があります。 |
TimelineServer | yarn-env.sh | YARN_TIMELINESERVER_OPTS の | クラスターレベル | TimelineServer のダイレクトメモリの最大サイズ。このパラメーターの最小値は 512m です。このパラメーターの値を調整する場合は、TimelineServer コンポーネントを再起動して変更を有効にする必要があります。 |
MRHistoryServer | mapred-env.sh | HADOOP_JOB_HISTORYSERVER_HEAPSIZE | クラスターレベル | このパラメーターの値を調整する場合は、MRHistoryServer コンポーネントを再起動して変更を有効にする必要があります。 |
YARN のクラスターリソースの設定
EMR コンソールの YARN サービスページの [設定] タブで、パラメーターを設定します。次の表にパラメーターを示します。
パラメーター | 説明 | 設定ファイル | 有効範囲 | 備考 |
yarn.scheduler.maximum-allocation-mb | スケジューラーの単一コンテナーが要求できる最大メモリリソース。 | yarn-site.xml | クラスターレベル | クラスターが単一コンテナーで大きなジョブを送信する必要がある場合は、このパラメーターの値を増やすことができます。ただし、値が大きすぎると、リソースの断片化が発生する可能性があります。このパラメーターの値を調整する場合は、ResourceManager コンポーネントを再起動して変更を有効にする必要があります。 |
yarn.scheduler.minimum-allocation-mb | スケジューラーの単一コンテナーが要求できる最小メモリリソース。 | yarn-site.xml | クラスターレベル | ほとんどの場合、このパラメーターの値を調整する必要はありません。このパラメーターの値を調整する場合は、ResourceManager コンポーネントを再起動して変更を有効にする必要があります。 |
yarn.scheduler.maximum-allocation-vcores | スケジューラーの単一コンテナーが要求できる vCPU の最大数。 | yarn-site.xml | クラスターレベル | デフォルト値は 32 です。クラスターが単一コンテナーで大きなジョブを送信する必要がある場合は、このパラメーターの値を増やすことができます。ただし、値が大きすぎると、リソースの断片化が発生する可能性があります。このパラメーターの値を調整する場合は、ResourceManager コンポーネントを再起動して変更を有効にする必要があります。 |
yarn.scheduler.minimum-allocation-vcores | スケジューラーの単一コンテナーが要求できる vCPU の最小数。 | yarn-site.xml | クラスターレベル | デフォルト値は 1 です。ほとんどの場合、このパラメーターの値を調整する必要はありません。このパラメーターの値を調整する場合は、ResourceManager コンポーネントを再起動して変更を有効にする必要があります。 |
yarn.nodemanager.resource.memory-mb | NodeManager コンポーネントが使用できるメモリリソース。 | yarn-site.xml | ノードグループレベル | クラスターのデプロイに基づいてこのパラメーターを設定できます。このパラメーターの値を調整する場合は、NodeManager コンポーネントを再起動して変更を有効にする必要があります。 重要 このパラメーターを設定するときは、ノードグループを選択する必要があります。 |
yarn.nodemanager.resource.cpu-vcores | NodeManager コンポーネントが使用できる使用可能な vCPU の数。 | yarn-site.xml | ノードグループレベル | デフォルト値は、ノードグループで使用されるインスタンスタイプの vCPU の数です。ノードグループが高メモリ仕様のインスタンスタイプを使用する場合、ノードグループは標準メモリ仕様のインスタンスタイプの vCPU 数の 2 倍を使用します。クラスターのデプロイに基づいてこのパラメーターの値を調整できます。このパラメーターの値を調整する場合は、NodeManager コンポーネントを再起動して変更を有効にする必要があります。 重要 このパラメーターを設定するときは、ノードグループを選択する必要があります。 |
yarn.nodemanager.resource.memory-mb および yarn.nodemanager.resource.cpu-vcores パラメーターを変更する場合、変更を有効にするには [ノードグループレベルの設定] を選択する必要があります。EMR では、クラスターはノードグループを使用して異なる ECS インスタンスタイプを実行できます。ノードグループ内のすべての ECS インスタンスは同じインスタンスタイプを持ちます。したがって、ノードグループレベルで NodeManager リソースを設定することで、スケジューリング中にインスタンスタイプが小さいノードが過負荷になったり、インスタンスタイプが大きいノードが十分に活用されなかったりすることがなくなります。これは、ECS ノードごとに NodeManager リソース構成を変更する必要がないことも意味します。
EMR では、クラスターを作成するとき、または初めてノードグループを追加してクラスターをスケールアウトするときに、yarn.scheduler.maximum-allocation-mb および yarn.nodemanager.resource.memory-mb パラメーターを設定できます。yarn.scheduler.maximum-allocation-mb パラメーターの値は、yarn.nodemanager.resource.memory-mb パラメーターの値より大きくする必要があります。これにより、ジョブが期待どおりにスケジュールされることが保証されます。
ノードグループの仕様をスペックアップするか、yarn.nodemanager.resource.memory-mb パラメーターの値を変更しても、yarn.scheduler.maximum-allocation-mb パラメーターの値は自動的に変更されません。yarn.scheduler.maximum-allocation-mb パラメーターの値は、必要に応じて手動で変更できます。
ジョブへの影響を防ぐため、新しいノードグループの yarn.scheduler.maximum-allocation-mb パラメーターを初めて設定するときに、ResourceManager コンポーネントは自動的に再起動されません。設定を有効にするには、ResourceManager コンポーネントを手動で再起動する必要があります。
説明ResourceManager コンポーネントを再起動すると、ジョブが失敗する可能性があります。オフピーク時にコンポーネントを再起動することをお勧めします。