Amazon EMR on EKS の垂直的自動スケーリングを設定する - Amazon EMR

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

dynamic.sizing

機能の切り替え

true, false

未設定

ラベル

spark.kubernetes.driver.label.emr-containers.amazonaws.com/dynamic.sizing

dynamic.sizing.signature

ジョブの署名

string

未設定

注釈

spark.kubernetes.driver.annotation.emr-containers.amazonaws.com/dynamic.sizing.signature

1 このパラメータを StartJobRun API で SparkSubmitParameter または ConfigurationOverride として使用します。

  • dynamic.sizingdynamic.sizing ラベルを使用して垂直的自動スケーリングのオンとオフを切り替えることができます。垂直的自動スケーリングをオンにするには、Spark ドライバーポッドの dynamic.sizingtrue に設定します。このラベルを省略したり、true 以外の値に設定したりすると、垂直的自動スケーリングはオフになります。

  • dynamic.sizing.signaturedynamic.sizing.signature ドライバーポッドのアノテーションを使用してジョブの署名を設定します。垂直的自動スケーリングは、Amazon EMR Spark ジョブのさまざまな実行にわたるリソース使用状況データを集約して、リソースのレコメンデーションを導き出します。ジョブを結び付けるための一意の識別子を指定します。

    注記

    ジョブが毎日あるいは毎週などの一定の間隔で繰り返される場合、ジョブの新しいインスタンスごとにジョブの署名を同じままにしておく必要があります。これにより、垂直的自動スケーリングでは、ジョブのさまざまな実行にわたるレコメンデーションを計算して集計できます。

1 このパラメータを StartJobRun API で SparkSubmitParameter または ConfigurationOverride として使用します。

任意指定のパラメータ

垂直的自動スケーリングは、以下のオプションパラメータもサポートしています。これらをドライバーポッドのアノテーションとして設定します。

キー 説明 使用できる値 デフォルト値 タイプ Spark パラメータ 1

dynamic.sizing.mode

垂直的自動スケーリングモード

Off, Initial, Auto

Off

注釈

spark.kubernetes.driver.label.emr-containers.amazonaws.com/dynamic.sizing.mode

dynamic.sizing.scale.memory

メモリスケーリングを有効にする

true, false

true

注釈

spark.kubernetes.driver.label.emr-containers.amazonaws.com/dynamic.sizing.scale.memory

dynamic.sizing.scale.cpu

CPU スケーリングをオンまたはオフにする

true, false

false

注釈

spark.kubernetes.driver.label.emr-containers.amazonaws.com/dynamic.sizing.scale.cpu

dynamic.sizing.scale.memory.min

メモリスケーリングの最小制限

文字列、K8s リソース量 例: 1G

未設定

注釈

spark.kubernetes.driver.label.emr-containers.amazonaws.com/dynamic.sizing.scale.memory.min

dynamic.sizing.scale.memory.max

メモリスケーリングの最大制限

文字列、K8s リソース量 例: 4G

未設定

注釈

spark.kubernetes.driver.label.emr-containers.amazonaws.com/dynamic.sizing.scale.memory.max

dynamic.sizing.scale.cpu.min

CPU スケーリングの最小制限

文字列、K8s リソース量 例: 1

未設定

注釈

spark.kubernetes.driver.label.emr-containers.amazonaws.com/dynamic.sizing.scale.cpu.min

dynamic.sizing.scale.cpu.max

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.max4G に設定します。