Amazon EMR on EKS の垂直的自動スケーリングを設定する
StartJobRun API を使用して Amazon EMR Spark ジョブを送信するときに、垂直的自動スケーリングを設定できます。「垂直的自動スケーリングを使用して Spark ジョブを送信する」の例に示すように、Spark ドライバーポッドに自動スケーリング関連の設定パラメータを設定します。
Amazon EMR on EKS 垂直的自動スケーリング演算子は、自動スケーリング機能を備えたドライバーポッドをリッスンし、ドライバーポッドの設定を使用して Kubernetes Vertical Pod Autoscaler (VPA) との統合を設定します。これにより、Spark エグゼキューターポッドのリソーストラッキングと自動スケーリングが容易になります。
以下のセクションでは、Amazon EKS クラスターの垂直的自動スケーリングを設定するときに使用できるパラメータについて説明します。
注記
機能切り替えパラメータをラベルとして設定し、残りのパラメータを Spark ドライバーポッドのアノテーションとして設定します。自動スケーリングパラメータは emr-containers.amazonaws.com/
ドメインに属し、dynamic.sizing
プレフィックスが付いています。
必須パラメータ
ジョブを送信する際には、Spark ジョブドライバーに以下の 2 つのパラメータを含める必要があります。
キー | 説明 | 使用できる値 | デフォルト値 | タイプ | Spark パラメータ 1 |
---|---|---|---|---|---|
|
機能の切り替え |
|
未設定 |
ラベル |
|
|
ジョブの署名 |
string |
未設定 |
注釈 |
|
1 このパラメータを StartJobRun
API で SparkSubmitParameter
または ConfigurationOverride
として使用します。
-
dynamic.sizing
—dynamic.sizing
ラベルを使用して垂直的自動スケーリングのオンとオフを切り替えることができます。垂直的自動スケーリングをオンにするには、Spark ドライバーポッドのdynamic.sizing
をtrue
に設定します。このラベルを省略したり、true
以外の値に設定したりすると、垂直的自動スケーリングはオフになります。 -
dynamic.sizing.signature
—dynamic.sizing.signature
ドライバーポッドのアノテーションを使用してジョブの署名を設定します。垂直的自動スケーリングは、Amazon EMR Spark ジョブのさまざまな実行にわたるリソース使用状況データを集約して、リソースのレコメンデーションを導き出します。ジョブを結び付けるための一意の識別子を指定します。注記
ジョブが毎日あるいは毎週などの一定の間隔で繰り返される場合、ジョブの新しいインスタンスごとにジョブの署名を同じままにしておく必要があります。これにより、垂直的自動スケーリングでは、ジョブのさまざまな実行にわたるレコメンデーションを計算して集計できます。
1 このパラメータを StartJobRun
API で SparkSubmitParameter
または ConfigurationOverride
として使用します。
任意指定のパラメータ
垂直的自動スケーリングは、以下のオプションパラメータもサポートしています。これらをドライバーポッドのアノテーションとして設定します。
キー | 説明 | 使用できる値 | デフォルト値 | タイプ | Spark パラメータ 1 |
---|---|---|---|---|---|
垂直的自動スケーリングモード |
|
|
注釈 |
|
|
メモリスケーリングを有効にする |
|
|
注釈 |
|
|
CPU スケーリングをオンまたはオフにする |
|
|
注釈 |
|
|
メモリスケーリングの最小制限 |
文字列、K8s リソース量1G |
未設定 |
注釈 |
spark.kubernetes.driver.label.emr-containers.amazonaws.com/dynamic.sizing.scale.memory.min |
|
メモリスケーリングの最大制限 |
文字列、K8s リソース量4G |
未設定 |
注釈 |
spark.kubernetes.driver.label.emr-containers.amazonaws.com/dynamic.sizing.scale.memory.max |
|
CPU スケーリングの最小制限 |
文字列、K8s リソース量1 |
未設定 |
注釈 |
spark.kubernetes.driver.label.emr-containers.amazonaws.com/dynamic.sizing.scale.cpu.min |
|
CPU スケーリングの最大制限 |
文字列、K8s リソース量2 |
未設定 |
注釈 |
spark.kubernetes.driver.label.emr-containers.amazonaws.com/dynamic.sizing.scale.cpu.max |
垂直的自動スケーリングモード
mode
パラメータは VPA がサポートするさまざまな自動スケーリングモードにマッピングされます。ドライバーポッドの dynamic.sizing.mode
アノテーションを使用してモードを設定します。このパラメータでは以下の値がサポートされています。
-
オフ — レコメンデーションをモニタリングできる dry-run モードですが、自動スケーリングは実行されません。これが垂直的自動スケーリングのデフォルトモードです。このモードでは、関連する Vertical Pod Autoscaler リソースがレコメンデーションを計算し、kubectl、Prometheus、Grafana などのツールを使用してレコメンデーションをモニタリングできます。
-
初期 — このモードでは、ジョブが繰り返し実行される場合など、ジョブの実行履歴に基づいてレコメンデーションがある場合、VPA はジョブの開始時にリソースを自動スケーリングします。
-
自動 — このモードでは、VPA は Spark エグゼキューターポッドを削除し、Spark ドライバーポッドがエグゼキューターポッドを再起動したときに推奨リソース設定でそれらを自動スケーリングします。VPA は実行中の Spark エグゼキューターポッドを削除することがあるため、中断されたエグゼキューターを再試行すると、さらにレイテンシーが発生する可能性があります。
リソースのスケーリング
垂直的自動スケーリングを設定する場合は、CPU およびメモリリソースをスケーリングするかどうかを選択することができます。dynamic.sizing.scale.cpu
および dynamic.sizing.scale.memory
アノテーションを true
または false
に設定します。デフォルトでは、CPU スケーリングは false
に設定され、メモリスケーリングは true
に設定されます。
リソースの最小値と最大値 (境界)
必要に応じて、CPU およびメモリリソースに境界を設定することもできます。自動スケーリングを有効にするときに、dynamic.sizing.[memory/cpu].[min/max]
アノテーション付きのこれらのリソースの最小値と最大値を選択します。デフォルトでは、リソースに制限はありません。アノテーションは Kubernetes リソース量を表す文字列値として設定します。例えば、4 GB を表すようにするには、dynamic.sizing.memory.max
を 4G
に設定します。