Managed Service for Apache Spark のパフォーマンスの強化

このドキュメントでは、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 プロパティが調整されます。

  • 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

コンソール

  1. コンソールで、[クラスタの作成] ページを開きます。 Google Cloud
  2. [追加構成] をクリックしてセクションを開きます。
  3. [カスタマイズとその他] を編集します。
  4. [クラスタのプロパティ] セクションで、次のプロパティを追加します。
    • Spark の最適化の機能拡張を有効にするには:
      1. [+ プロパティを追加] をクリックします。
      2. [プレフィックス] リストで [spark] を選択します。
      3. [キー] フィールドに「spark.dataproc.enhanced.optimizer.enabled」と入力し、[] フィールドに「true」と入力します。
    • Spark 実行の機能拡張を有効にするには:
      1. [+ プロパティを追加] をクリックします。
      2. [プレフィックス] リストで [spark] を選択します。
      3. [キー] フィールドに「spark.dataproc.enhanced.execution.enabled」と入力し、[] フィールドに「true」と入力します。
  5. 他のクラスタ フィールドを入力し、[クラスタを作成] をクリックします。

gcloud

  1. ターミナル ウィンドウまたは 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

  1. 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

コンソール

  1. コンソールで、 [ジョブ] ページを開きます。 Google Cloud
  2. [**ジョブ**] ページで [**ジョブを送信**] をクリックし、ジョブの [**プロパティ**] セクションまでスクロールします。
    1. Spark の最適化の機能拡張を有効にするには:
      1. [+ プロパティを追加] をクリックします。[キー] フィールドに「spark.dataproc.enhanced.optimizer.enabled」、[] フィールドに「true」と入力します。
    2. Spark 実行の機能拡張を有効にするには:
      1. [+ プロパティを追加] をクリックします。
      2. [キー] フィールドに「spark.dataproc.enhanced.execution.enabled」、[] フィールドに「true」と入力します。
  3. ジョブ送信の他のフィールドへの入力および確認を行い、[送信] をクリックします。

gcloud

  1. ターミナル ウィンドウまたは Cloud Shell で、次の gcloud dataproc jobs submit コマンドをローカルに実行します。

    gcloud dataproc jobs submit SPARK_JOB_TYPE \
        --cluster=CLUSTER_NAME \
        --region=REGION \
        --properties=PROPERTIES
    

    注:

    • SPARK_JOB_TYPE: sparkpysparkspark-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
      

API

  1. jobs.submit リクエストの一部として、SparkJobPySparkJobSparkSqlJob または 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"