EMR 3.49.0 および 5.15.0 以降では、クラスター作成時に選択したインスタンスタイプおよびデプロイされたサービスに基づき、EMR が YARN コンポーネントのデフォルトメモリ値を動的に設定します。クラスター作成後は、EMR コンソールでこれらの値を調整できます。
クラスター初期化後に YARN コンポーネントが想定より少ないメモリを受け取る場合は、以下の 2 点を確認してください。
クラスターにデプロイされているサービスの数。EMR は使用可能なメモリをすべてのデプロイ済みサービスに分配するため、サービス数が多いほどコンポーネントごとのメモリ量が少なくなります。
ノードグループ内の Elastic Compute Service (ECS) インスタンスの仕様が、すべてのデプロイ済みサービスのメモリ要件を満たしているかどうか。
YARN コンポーネントのヒープメモリサイズ
EMR コンソールの YARN サービスページの Configure タブで、yarn-env.sh または mapred-env.sh の以下のパラメーターを設定します。すべてのパラメーターはクラスターレベルで有効となり、適用にはコンポーネントの再起動が必要です。
コンポーネント | パラメーター | 構成ファイル | 調整タイミング | 制約事項 |
ResourceManager |
| yarn-env.sh | 小規模タスクの大量投入により ResourceManager が遅延する場合 | 最小値:1024。適用には ResourceManager を再起動する必要があります。 |
NodeManager |
| yarn-env.sh | Shuffle Service が NodeManager メモリを過剰に占有し、フル GC が発生する場合 | 適用には NodeManager を再起動する必要があります。 |
WebAppProxyServer |
| yarn-env.sh | デフォルト値が不十分な場合 | 適用には WebAppProxyServer を再起動する必要があります。 |
TimelineServer |
| yarn-env.sh | デフォルト値が不十分な場合 | 適用には TimelineServer を再起動する必要があります。 |
TimelineServer |
| yarn-env.sh | TimelineServer でダイレクトメモリの圧迫が発生する場合 | 最小値:512m。適用には TimelineServer を再起動する必要があります。 |
MRHistoryServer |
| mapred-env.sh | デフォルト値が不十分な場合 | 適用には MRHistoryServer を再起動する必要があります。 |
YARN のクラスターリソース構成
EMR コンソールの YARN サービスページの Configure タブで、以下の yarn-site.xml パラメーターを設定します。
スケジューラ割り当て制限
これらのパラメーターは クラスターレベル で適用され、コンテナごとのリソース上限および下限を制御します。変更には ResourceManager の再起動が必要です。
パラメーター | 説明 | デフォルト | 調整タイミング |
| スケジューラから単一コンテナがリクエストできる最大メモリ量 | — | 大規模な単一コンテナタスクを送信するワークロード向けに増加させます。ただし、過度に大きな値はリソースの断片化を引き起こす可能性があります。 |
| スケジューラから単一コンテナがリクエストできる最小メモリ量 | — | 調整が必要となることは稀です。 |
| スケジューラから単一コンテナがリクエストできる最大 vCPU 数 | 32 | 大規模な単一コンテナタスクを送信するワークロード向けに増加させます。ただし、過度に大きな値はリソースの断片化を引き起こす可能性があります。 |
| スケジューラから単一コンテナがリクエストできる最小 vCPU 数 | 1 | 調整が必要となることは稀です。 |
NodeManager リソース制限
これらのパラメーターは ノードグループレベル で適用されます。設定する際は、EMR コンソールで ノードグループレベル設定 を選択してください。選択しないと変更は有効になりません。EMR はノードグループ間で異なるインスタンスタイプの混在をサポートしており、同一ノードグループ内のすべての ECS インスタンスは同じインスタンスタイプを共有します。NodeManager リソースをノードグループレベルで構成することで、小規模ノードの過負荷や大規模ノードのリソース未活用を防止できます。
パラメーター | 説明 | デフォルト | 調整タイミング |
| コンテナ向けに NodeManager が利用可能な物理メモリの合計量 | クラスター作成時にインスタンスタイプに基づいて設定されます | ご利用のクラスターデプロイに基づいて構成してください。適用には NodeManager を再起動する必要があります。 |
| コンテナ向けに NodeManager が利用可能な vCPU の合計数 | インスタンスタイプの vCPU 数。高メモリインスタンスタイプの場合、デフォルト値は通常メモリインスタンスタイプの vCPU 数の 2 倍となります。 | ワークロードの特性に基づいて調整してください。適用には NodeManager を再起動する必要があります。 |
スケジューラと NodeManager のメモリ関係
yarn.scheduler.maximum-allocation-mb は、タスクが正しくスケジュールされるようにするために、yarn.nodemanager.resource.memory-mb より大きい値である必要があります。
これらの 2 つのパラメーターを管理する際は、以下の点にご注意ください。
EMR では、クラスター作成時または初めてノードグループを追加してスケーリングする際に、両方のパラメーターを構成できます。
ノードグループのインスタンス仕様をスペックアップするか、
yarn.nodemanager.resource.memory-mbを手動で変更しても、yarn.scheduler.maximum-allocation-mbは自動的には更新されません。必要に応じて手動で更新してください。新しいノードグループに対して初めて
yarn.scheduler.maximum-allocation-mbを構成する際、ResourceManager は自動的に再起動されません。変更を適用するには、手動で ResourceManager を再起動してください。
ResourceManager の再起動により、実行中のタスクが失敗する可能性があります。オフピーク時間帯に再起動を実施してください。