このドキュメントでは、Managed Service for Apache Spark の Spark パフォーマンスの向上を有効にして、コストを削減し、Managed Service for Apache Spark ジョブがより多くのデータをより迅速に処理する方法について説明します。
Managed Service for Apache Spark のパフォーマンスの向上には、次のものがあります。
- Spark オプティマイザーの機能拡張:
- 作成されたオプティマイザー ルールで、Spark プランを改善
- Spark ジョブ内で使用する際の Managed Service for Apache Spark の BigQuery コネクタのパフォーマンスの向上
- Spark Execution の機能拡張:
- Spark 実行エンジンの改善
Managed Service for Apache Spark のその他のパフォーマンスの向上: Managed Service for Apache Spark クラスタ キャッシュをご覧ください。 これにより、Cloud Storage 内のデータへのアクセス時間を短縮できます。
Spark のパフォーマンス向上は、クラスタまたは Spark ジョブで有効にできます。
クラスタで有効になっている Spark のパフォーマンス向上は、Managed Service for Apache Spark に送信された場合でも、クラスタに直接送信された場合でも、デフォルトでは、クラスタで実行されるすべての Spark ジョブに適用されます。
Spark のパフォーマンス向上は、Managed Service for Apache Spark に送信されるジョブで 有効または無効に することもできます。ジョブに適用される Spark パフォーマンス向上の設定は、指定されたジョブに対してクラスタレベルで設定された競合する設定をオーバーライドします。
料金
Spark のパフォーマンスの向上に追加料金はかかりません。Managed Service for Apache Spark の標準 料金が適用されます。
考慮事項
Spark のパフォーマンスの向上では、次のプロパティなど、Spark プロパティが調整されます。
spark.sql.shuffle.partitions: Spark のパフォーマンス強化により、2.2イメージ バージョン クラスタではこのプロパティが1000に設定されます。この設定により、小さなジョブの速度が低下する可能性があります。spark.dataproc.sql.catalog.file.index.stats.enabled: この設定では、Hive パーティション数が多すぎると、ドライバの OOM(メモリ不足)状態になる可能性があります。このプロパティを無効にすると、OOM 状態を修正できます。
クラスタ作成時に機能拡張を有効にする
コンソール、Google Cloud CLI、Dataproc API を使用して、イメージ バージョン 2.0.69 以降、2.1.17 以降、2.2.0 以降のイメージ リリースで Managed Service for Apache Spark クラスタを作成するときに、Managed Service for Apache Spark のパフォーマンスを向上できます。 Google Cloud
コンソール
- コンソールで、[クラスタの作成] ページを開きます。 Google Cloud
- [追加構成] をクリックしてセクションを開きます。
- [カスタマイズとその他] を編集します。
- [クラスタのプロパティ] セクションで、次のプロパティを追加します。
- Spark の最適化の機能拡張を有効にするには:
- [+ プロパティを追加] をクリックします。
- [プレフィックス] リストで [spark] を選択します。
- [キー] フィールドに「
spark.dataproc.enhanced.optimizer.enabled」と入力し、[値] フィールドに「true」と入力します。
- Spark 実行の機能拡張を有効にするには:
- [+ プロパティを追加] をクリックします。
- [プレフィックス] リストで [spark] を選択します。
- [キー] フィールドに「
spark.dataproc.enhanced.execution.enabled」と入力し、[値] フィールドに「true」と入力します。
- Spark の最適化の機能拡張を有効にするには:
- 他のクラスタ フィールドを入力し、[クラスタを作成] をクリックします。
gcloud
ターミナル ウィンドウまたは Cloud Shellで、次の gcloud dataproc clusters create コマンドをローカルに実行します。
gcloud dataproc clusters create CLUSTER_NAME \ --project=PROJECT_ID \ --region=REGION \ --image-version=IMAGE \ --properties=PROPERTIES
注:
- CLUSTER_NAME: クラスタ名。プロジェクト内で一意にする必要があります。名前は先頭を小文字にする必要があり、51 文字以下の小文字、数字、ハイフンを使用できます。末尾をハイフンにすることはできません。削除されたクラスタの名前は再利用できます。
- PROJECT_ID: クラスタに関連付けるプロジェクト。
- REGION: クラスタが配置される Compute Engine のリージョン(
us-central1など)。- オプションの
--zone=ZONEフラグ を追加して、指定されたリージョン内のゾーン(us-central1-aなど)を指定できます。ゾーンを指定しない場合、 Managed Service for Apache Spark 自動ゾーン プレースメント 機能は、指定されたリージョンのあるゾーンを選択します。
- オプションの
- IMAGE: Managed Service for Apache Spark のオプティマイザーと実行のパフォーマンス
の向上は、Managed Service for Apache Spark イメージ バージョン
2.0.69+と2.1.17+以降のリリースで利用できます。このフラグを省略すると、Managed Service for Apache Spark は、クラスタのデフォルトの Managed Service for Apache Spark イメージの最新のサブマイナー バージョンを選択します( デフォルトの Managed Service for Apache Spark イメージ バージョンを参照)。 PROPERTIES:
- Spark 最適化の機能拡張を有効にするには、以下を指定します。
spark:spark.dataproc.enhanced.optimizer.enabled=true- Spark 実行の機能拡張を有効にするには、以下を指定します。
spark:spark.dataproc.enhanced.execution.enabled=true- Spark の最適化と実行の機能拡張を有効にするには、以下を指定します。
spark:spark.dataproc.enhanced.optimizer.enabled=true,spark:spark.dataproc.enhanced.execution.enabled=true
API
clusters.createリクエストの一部として、次のSoftwareConfig.propertiesを指定します。- Spark 最適化の機能拡張を有効にするには、以下を指定します。
"spark:spark.dataproc.enhanced.optimizer.enabled": "true"- Spark 実行の機能拡張を有効にするには、以下を指定します。
"spark:spark.dataproc.enhanced.execution.enabled": "true"- Spark の最適化と実行の機能拡張を有効にするには、以下を指定します。
"spark:spark.dataproc.enhanced.optimizer.enabled": "true","spark:spark.dataproc.enhanced.execution.enabled": "true"
ジョブ送信時に機能拡張を有効または無効にする
コンソール、Google Cloud CLI、Dataproc API を使用して、Managed Service for Apache Spark に送信された Spark ジョブで Spark パフォーマンスの向上を有効または無効にできます。 Google Cloud
コンソール
- コンソールで、 [ジョブ] ページを開きます。 Google Cloud
- [**ジョブ**] ページで [**ジョブを送信**] をクリックし、ジョブの
[**プロパティ**] セクションまでスクロールします。
- Spark の最適化の機能拡張を有効にするには:
- [+ プロパティを追加] をクリックします。[キー] フィールドに「spark.dataproc.enhanced.optimizer.enabled」、[値] フィールドに「true」と入力します。
- Spark 実行の機能拡張を有効にするには:
- [+ プロパティを追加] をクリックします。
- [キー] フィールドに「spark.dataproc.enhanced.execution.enabled」、[値] フィールドに「true」と入力します。
- Spark の最適化の機能拡張を有効にするには:
- ジョブ送信の他のフィールドへの入力および確認を行い、[送信] をクリックします。
gcloud
ターミナル ウィンドウまたは Cloud Shell で、次の gcloud dataproc jobs submit コマンドをローカルに実行します。
gcloud dataproc jobs submit SPARK_JOB_TYPE \ --cluster=CLUSTER_NAME \ --region=REGION \ --properties=PROPERTIES
注:
- SPARK_JOB_TYPE:
spark、pyspark、spark-sqlまたはspark-rを指定します。 - CLUSTER_NAME: ジョブが実行されるジョブの名前。
- REGION: クラスタが配置されているリージョン。
PROPERTIES:
- Spark 最適化の機能拡張を有効にするには、以下を指定します。
spark.dataproc.enhanced.optimizer.enabled=true- Spark 実行の機能拡張を有効にするには、以下を指定します。
spark.dataproc.enhanced.execution.enabled=true- Spark の最適化と実行の機能拡張を有効にするには、以下を指定します。
spark.dataproc.enhanced.optimizer.enabled=true,spark.dataproc.enhanced.execution.enabled=true
- SPARK_JOB_TYPE:
API
jobs.submitリクエストの一部として、SparkJob、PySparkJob、SparkSqlJob または SparkRJob の次のpropertiesを指定します。- Spark 最適化の機能拡張を有効にするには、以下を指定します。
"spark.dataproc.enhanced.optimizer.enabled=true"- Spark 実行の機能拡張を有効にするには、以下を指定します。
"spark.dataproc.enhanced.execution.enabled=true"- Spark の最適化と実行の機能拡張を有効にするには、以下を指定します。
"spark.dataproc.enhanced.execution.enabled=true,spark.dataproc.enhanced.optimizer.enabled=true"