このドキュメントでは、Managed Service for Apache Spark バッチ ワークロードの自動チューニングについて説明します。Spark ワークロードのパフォーマンスと復元力を最適化することは、Spark 構成オプションの数と、これらのオプションがワークロードに与える影響を評価することの難しさから、困難な場合があります。Managed Service for Apache Spark の自動チューニングは、Spark の最適化のベスト プラクティスとワークロード実行(「コホート」と呼ばれる)の分析に基づいて、繰り返される Spark ワークロードに Spark 構成設定を自動的に適用することで、手動ワークロード構成に代わる手段を提供します。
Managed Service for Apache Spark の自動チューニングに登録する
このページで説明されている Managed Service for Apache Spark の自動チューニング プレビュー版リリース に登録するには、 Managed Service for Apache Spark プレビュー版アクセス リクエスト 登録フォームに記入して送信してください。フォームが承認されると、フォームにリストされているプロジェクトはプレビュー機能にアクセスできるようになります。
特典
Managed Service for Apache Spark の自動チューニングには、次のようなメリットがあります。
- 自動最適化: 非効率的な Managed Service for Apache Spark バッチと Spark 構成を自動的にチューニングし、 ジョブの実行時間を短縮できます。
- 履歴学習: 繰り返しの実行から学習し、ワークロードに合わせた推奨事項を適用します。
自動チューニング コホート
自動チューニングは、バッチ ワークロードの繰り返しの実行(コホート)に適用されます。
バッチ ワークロードを送信するときに指定するコホート名は、繰り返しのワークロードの連続実行の 1 つとして識別されます。
自動チューニングは、次のようにバッチ ワークロード コホートに適用されます。
自動チューニングは、ワークロードの 2 番目以降のコホートで計算され、適用されます。Managed Service for Apache Spark の自動チューニングでは、最適化にワークロード履歴を使用するため、繰り返しのワークロードの最初の実行には自動チューニングは適用されません。
自動チューニングは、実行中のワークロードには遡って適用されず、新しく送信されたワークロードにのみ適用されます。
自動チューニングは、コホート統計を分析することで、時間の経過とともに学習して改善されます。 システムが十分なデータを収集できるように、少なくとも 5 回の実行で自動チューニングを有効にしておくことをおすすめします。
コホート名: 繰り返しのワークロード タイプを
識別するのに役立つコホート名を使用することをおすすめします。たとえば、毎日の販売集計タスクを実行するスケジュール設定されたワークロードのコホート名として daily_sales_aggregation を使用できます。
自動チューニングのシナリオ
該当する場合、自動チューニングは次の scenarios または目標を自動的に選択して実行し、バッチ ワークロードを最適化します。
- スケーリング: Spark 自動スケーリング構成の設定。
- 結合の最適化: SQL ブロードキャスト 結合のパフォーマンスを最適化する Spark 構成の設定。
- シャッフル パーティション: シャッフル パーティションをチューニングする Spark 構成の設定。
Managed Service for Apache Spark の自動チューニングを使用する
コンソール、Google Cloud CLI、Dataproc API、または Cloud クライアント ライブラリを使用して、バッチワークロードで Managed Service for Apache Spark の自動チューニングを有効にできます。 Google Cloud
コンソール
定期的なバッチ ワークロードを送信するたびに Managed Service for Apache Spark の自動チューニングを有効にするには、次の手順を行います。
コンソールで、Managed Service for Apache Spark の [バッチ] ページに移動します。 Google Cloud
バッチ ワークロードを作成するには、[作成] をクリックします。
[自動チューニング] セクションで次の操作を行います。
[有効] ボタンを切り替えて、Spark ワークロードの自動チューニングを有効にします。
コホート: バッチを一連の反復的なワークロードの 1 つとして識別するコホート名を入力します。自動チューニングは、このコホート名で送信された 2 回目以降のワークロードに適用されます。たとえば、毎日の販売集計タスクを実行するスケジュール設定されたバッチ ワークロードのコホート名として
daily_sales_aggregationを指定します。
[バッチを作成] ページの他のセクションに必要に応じて入力し、[送信] をクリックします。これらのフィールドの詳細については、 バッチ ワークロードを送信するをご覧ください。
gcloud
定期的なバッチ ワークロードが送信されるたびに Managed Service for Apache Spark の自動チューニングを有効にするには、次の gcloud CLI
gcloud dataproc batches submit
コマンドをターミナル ウィンドウまたは
Cloud Shellでローカルに実行します。
gcloud dataproc batches submit COMMAND \ --region=REGION \ --cohort=COHORT \ --autotuning-scenarios=auto \ other arguments ...
次のように置き換えます。
- COMMAND:Spark ワークロード タイプ(
Spark、PySpark、Spark-Sql、Spark-Rなど)。 - REGION: バッチ ワークロードが実行される リージョン 。
- COHORT: コホート名。バッチを一連の反復的なワークロードの 1 つとして識別します。自動チューニングは、このコホート名で送信された 2 回目以降のワークロードに適用されます。たとえば、毎日の販売集計タスクを実行するスケジュール設定されたバッチ ワークロードのコホート名として
daily_sales_aggregationを指定します。 --autotuning-scenarios=auto: 自動チューニングを有効にします。
API
定期的なバッチ ワークロードが送信されるたびに Managed Service for Apache Spark の自動チューニングを有効にするには、次のフィールドを含む batches.create リクエストを送信します。
RuntimeConfig.cohort:コホート名。バッチを一連の反復的なワークロードの 1 つとして識別します。自動チューニングは、このコホート名で送信された 2 回目以降のワークロードに適用されます。たとえば、毎日の販売集計タスクを実行するスケジュール設定されたバッチ ワークロードのコホート名としてdaily_sales_aggregationを指定します。AutotuningConfig.scenarios:AUTOを指定して、Spark バッチ ワークロードで自動チューニングを有効にします。
例:
...
runtimeConfig:
cohort: COHORT_NAME
autotuningConfig:
scenarios:
- AUTO
...
Java
このサンプルを試す前に、Java クライアント ライブラリを使用した Managed Service for Apache Spark クイックスタートのセットアップ手順を完了してください。詳細については、 Managed Service for Apache Spark Java API リファレンス ドキュメントをご覧ください。
Managed Service for Apache Spark の認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、 ローカル開発環境の認証の設定をご覧ください。
定期的なバッチ ワークロードが送信されるたびに Managed Service for Apache Spark の自動チューニングを有効にするには、次のフィールドを含む CreateBatchRequest で BatchControllerClient.createBatch を呼び出します。
Batch.RuntimeConfig.cohort:コホート名。バッチを一連の反復的なワークロードの 1 つとして識別します。自動チューニングは、このコホート名で送信された 2 回目以降のワークロードに適用されます。たとえば、毎日の販売集計タスクを実行するスケジュール設定されたバッチ ワークロードのコホート名としてdaily_sales_aggregationを指定できます。Batch.RuntimeConfig.AutotuningConfig.scenarios:AUTOを指定して、Spark バッチ ワークロードで自動チューニングを有効にします。
例:
...
Batch batch =
Batch.newBuilder()
.setRuntimeConfig(
RuntimeConfig.newBuilder()
.setCohort("daily_sales_aggregation")
.setAutotuningConfig(
AutotuningConfig.newBuilder()
.addScenarios(Scenario.AUTO))
...
.build();
batchControllerClient.createBatch(
CreateBatchRequest.newBuilder()
.setParent(parent)
.setBatchId(batchId)
.setBatch(batch)
.build());
...
API を使用するには、google-cloud-dataproc クライアント ライブラリ バージョン 4.43.0
以降を使用する必要があります。次のいずれかの構成を使用して、ライブラリをプロジェクトに追加できます。
Maven
<dependencies>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-dataproc</artifactId>
<version>4.43.0</version>
</dependency>
</dependencies>
Gradle
implementation 'com.google.cloud:google-cloud-dataproc:4.43.0'
SBT
libraryDependencies += "com.google.cloud" % "google-cloud-dataproc" % "4.43.0"
Python
このサンプルを試す前に、Python クライアント ライブラリを使用した Managed Service for Apache Spark クイックスタートのセットアップ手順を完了してください。詳細については、 Managed Service for Apache Spark Python API リファレンス ドキュメントをご覧ください。
Managed Service for Apache Spark の認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、 ローカル開発環境の認証の設定をご覧ください。
定期的なバッチ ワークロードが送信されるたびに Managed Service for Apache Spark の自動チューニングを有効にするには、次のフィールドを含む Batch で BatchControllerClient.create_batch を呼び出します。
batch.runtime_config.cohort:コホート名。バッチを一連の反復的なワークロードの 1 つとして識別します。自動チューニングは、このコホート名で送信された 2 回目以降のワークロードに適用されます。たとえば、毎日の販売集計タスクを実行するスケジュール設定されたバッチ ワークロードのコホート名としてdaily_sales_aggregationを指定できます。batch.runtime_config.autotuning_config.scenarios:AUTOを指定して、Spark バッチ ワークロードで自動チューニングを有効にします。
例:
# Create a client
client = dataproc_v1.BatchControllerClient()
# Initialize request argument(s)
batch = dataproc_v1.Batch()
batch.pyspark_batch.main_python_file_uri = "gs://bucket/run_tpcds.py"
batch.runtime_config.cohort = "daily_sales_aggregation"
batch.runtime_config.autotuning_config.scenarios = [
Scenario.AUTO
]
request = dataproc_v1.CreateBatchRequest(
parent="parent_value",
batch=batch,
)
# Make the request
operation = client.create_batch(request=request)
API を使用するには、google-cloud-dataproc クライアント ライブラリ バージョン 5.10.1
以降を使用する必要があります。プロジェクトに追加するには、次の要件を使用します。
google-cloud-dataproc>=5.10.1
Airflow
自動チューニングされたバッチ コホートを 1 つずつ手動で送信する代わりに、Airflow を使用して、繰り返しのバッチ ワークロードの送信をスケジュールできます。これを行うには、 次のフィールドを含む Batch で BatchControllerClient.create_batchを呼び出します。
batch.runtime_config.cohort:コホート名。バッチを一連の反復的なワークロードの 1 つとして識別します。自動チューニングは、このコホート名で送信された 2 回目以降のワークロードに適用されます。たとえば、毎日の販売集計タスクを実行するスケジュール設定されたバッチ ワークロードのコホート名としてdaily_sales_aggregationを指定できます。batch.runtime_config.autotuning_config.scenarios:AUTOを指定して、Spark バッチ ワークロードで自動チューニングを有効にします。
例:
create_batch = DataprocCreateBatchOperator(
task_id="batch_create",
batch={
"pyspark_batch": {
"main_python_file_uri": PYTHON_FILE_LOCATION,
},
"environment_config": {
"peripherals_config": {
"spark_history_server_config": {
"dataproc_cluster": PHS_CLUSTER_PATH,
},
},
},
"runtime_config": {
"cohort": "daily_sales_aggregation",
"autotuning_config": {
"scenarios": [
Scenario.AUTO,
]
}
},
},
batch_id="BATCH_ID",
)
API を使用するには、google-cloud-dataproc クライアント ライブラリ バージョン 5.10.1
以降を使用する必要があります。次の Airflow 環境要件を使用できます。
google-cloud-dataproc>=5.10.1
Managed Service for Apache Airflow でパッケージを更新するには、 Managed Airflow 用の Python 依存関係をインストールする をご覧ください。
自動チューニングの変更を表示する
バッチ ワークロードに対する Managed Service for Apache Spark の自動チューニングの変更を表示するには、
gcloud dataproc batches describe
コマンドを実行します。
例: gcloud dataproc batches describe の出力は次のようになります。
...
runtimeInfo:
propertiesInfo:
# Properties set by autotuning.
autotuningProperties:
spark.dataproc.sql.broadcastJoin.hints:
annotation: Converted 1 Sort-Merge Joins to Broadcast Hash Join
value: v2;Inner,<hint>
spark.dynamicAllocation.initialExecutors:
annotation: Adjusted Initial executors based on stages submitted in first
2 minutes to 9
overriddenValue: '2'
value: '9'
spark.dynamicAllocation.maxExecutors:
annotation: Tuned Max executors to 11
overriddenValue: '5'
value: '11'
spark.dynamicAllocation.minExecutors:
annotation: Changed Min executors to 9
overriddenValue: '2'
value: '9'
...
実行中のワークロード、 完了したワークロード、または失敗したワークロードに適用された最新の自動チューニングの変更は、 [バッチの詳細] ページの Google Cloud コンソールで、[概要] タブの下に表示されます。

料金
Managed Service for Apache Spark の自動チューニングは、限定公開プレビュー期間中は追加料金なしで提供されます。標準の Managed Service for Apache Spark の料金 が適用されます。