アプリケーションの自動スケーリングの有効化

Sparkアプリケーションのリソース要件(Spark実行プログラムの数)は、入力データ・セットのサイズによって異なる可能性があるため、常に事前に見積もることができるとは限りません。

この状況を支援するために、自動スケーリングを使用してSparkアプリケーションをサブミットできます。これにより、アプリケーションの要求に基づいて、アプリケーションが必要とする実行プログラムの数が自動的に決定されます。 既存のアプリケーション構成に構成設定ae.spark.autoscale.enable=trueを追加することで、Sparkアプリケーションの基本自動スケーリングを有効にできます。

基本的な自動スケーリングを使用したアプリケーションのサブミット

自動スケーリングを有効にしてアプリケーションをサブミットする手順は、自動スケーリングを有効にせずにアプリケーションをサブミットする手順と同じです。 唯一の違いは、構成設定ae.spark.autoscale.enable=trueをアプリケーション・ペイロードに追加する必要があることです。

  1. Sparkアプリケーションのサブミット
  2. 基本的な自動スケーリングを有効にする例として、以下のサンプルJSONペイロードを使用します:
    {
      "application_details": {
        "application": "/opt/ibm/spark/examples/src/main/python/wordcount.py",
        "arguments": ["/opt/ibm/spark/examples/src/main/resources/people.txt"]
       },
       "conf": {
         "ae.spark.autoscale.enable":"true"
       }
    }
    

アプリケーション構成の自動スケーリング

以下の構成設定を使用して、executor数の自動スケーリングをさらに制御できます。

オートスケールの構成設定
構成設定 説明 デフォルト
ae.spark.autoscale.enable アプリケーションの要求および設定されているその他の自動スケーリング構成に基づいて、アプリケーションが自動スケーリングを行うことをシグナル通知します。 インスタンス・レベルで指定すると、インスタンス内のすべてのアプリケーションが自動スケーリングされます。 false
spark.dynamicAllocation.initialExecutors Sparkアプリケーションによる要求に関係なく、作成される実行プログラムの初期数を指定します 0
spark.dynamicAllocation.minExecutors Sparkアプリケーションによる要求に関係なく、保守する実行プログラムの最小数を指定します 0
spark.dynamicAllocation.maxExecutors Sparkアプリケーションによる要求に関係なく作成される実行プログラムの最大数を指定します 2
ae.spark.autoscale.scaleupDemandPercentage アプリケーション自動スケーリング機能によって実行される必要がある、Sparkアプリケーションによって要求される実行プログラムのパーセンテージを指定します 例えば、特定のステージでSparkアプリケーションが10個のエグゼキューターを要求し、この構成の値が50%に設定されている場合、アプリケーション自動スケーリング機能はエグゼキューターの数を5個のエグゼキューターで拡大します。 この構成のデフォルト値は100%です。これは基本的に、アプリケーションの要求によって求められた任意の数のエグゼキューターがアプリケーション自動スケーリング機能で追加できることを意味します。 100
ae.spark.autoscale.scaledownExcessPercentage アプリケーション自動スケーリング機能によって削除される、Sparkアプリケーションによって保持されているアイドル実行プログラムのパーセンテージを指定します。 例えば、Sparkアプリケーションで特定のステージを完了した後に、アプリケーションによって保持されているアイドル状態のエグゼキューターが20あり、この構成の値が25%に設定されている場合、アプリケーション自動スケーリング機能は、アプリケーション内のエグゼキューターを4つのエグゼキューターによってスケールダウンします。 この構成のデフォルト値は100%です。これは、アプリケーション自動スケーリング機能がすべてのアイドル状態のエグゼキューターをスケールダウンできることを意味します。 100
ae.spark.autoscale.frequency アプリケーション自動スケーラーがエグゼキューターをスケールアップしたり、アプリケーション内のエグゼキューターをスケールダウンしたりする頻度(秒単位)。 10s

アプリケーションがスケールアップまたはスケールダウンできるエグゼキューターの数の上限と下限を示す、auto-scalingアプリケーション・ペイロードの例。

{
  "application_details": {
    "application": "cos://<application-bucket-name>.<cos-reference-name>/my_spark_application.py",
    "conf": {
      "ae.spark.autoscale.enable": "true",
      "spark.dynamicAllocation.initialExecutors": "0",
      "spark.dynamicAllocation.minExecutors": "1",
      "spark.dynamicAllocation.maxExecutors": "10",
      "spark.hadoop.fs.cos.<cos-reference-name>.endpoint": "s3.direct.us-south.cloud-object-storage.appdomain.cloud",
      "spark.hadoop.fs.cos.<cos-reference-name>.iam.api.key": "<iam-api-key-of-application-bucket>"
    }
  }
}

インスタンスでの自動スケーリングの有効化

デフォルトでは、Analytics Engine 標準サーバーレス・プランのインスタンスを作成すると、アプリケーションの自動スケーリングは無効になります。 インスタンス・レベルですべてのアプリケーションの自動スケーリングを有効にする場合は、インスタンスの作成時に「ae.spark.autoscale.enable」:「true」をデフォルトのSpark構成として明示的に設定できます。 デフォルトのSpark構成を参照してください。