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

このドキュメントでは、Managed Service for Apache 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 コンソール、Google Cloud CLI、Managed Service for Apache Spark API を使用して、イメージ バージョン 2.0.69 以降、2.1.17 以降、2.2.0 以降のイメージ リリースで Managed Service for Apache Spark クラスタを作成するときに、Managed Service for Apache Spark のパフォーマンスを向上できます。

コンソール

  1. Google Cloud コンソールで、Managed Service for Apache Spark の [クラスタの作成] ページを開きます。
  2. [Managed Service for Apache Spark クラスタの作成] フォームで、[クラスタ] 行の [作成] をクリックします。
  3. [Managed Service for Apache Spark クラスタを作成する] ページで、[クラスタのカスタマイズ] パネルをクリックし、[クラスタ プロパティ] セクションまでスクロールします。
    1. Spark の最適化の機能拡張を有効にするには:
      1. [+ プロパティを追加] をクリックします。
      2. [プレフィックス] リストで [spark] を選択し、[キー] フィールドに「spark.dataproc.enhanced.optimizer.enabled」、[Value] フィールドに「true」と入力します。
    2. Spark 実行の機能拡張を有効にするには:
      1. [+ プロパティを追加] をクリックします。
      2. [プレフィックス] リストで [spark] を選択し、[キー] フィールドに「spark.dataproc.enhanced.execution.enabled」、[Value] フィールドに「true」と入力します。
  4. クラスタ作成の他のフィールドへの入力および確認を行い、[作成] をクリックします。

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 コンソール、Google Cloud CLI、Managed Service for Apache Spark API を使用して、Managed Service for Apache Spark に送信された Spark ジョブで Spark パフォーマンスの向上を有効または無効にできます。

コンソール

  1. Google Cloud コンソールで、Managed Service for Apache Spark の [ジョブ] ページを開きます。
  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"