Dataproc Spark のパフォーマンスの向上

このドキュメントでは、Dataproc Spark のパフォーマンスの向上を有効にして、コストを削減し、Dataproc Spark ジョブがより多くのデータをより迅速に処理する方法について説明します。

Dataproc Spark のパフォーマンスの向上には、次のようなものがあります。

  • Spark オプティマイザーの機能拡張:
    • 作成されたオプティマイザー ルールで、Spark プランを改善
    • Spark ジョブ内で使用する際の Dataproc の BigQuery コネクタのパフォーマンスの向上
  • Spark Execution の機能拡張:
    • Spark 実行エンジンの改善

Dataproc のその他のパフォーマンスの向上: Dataproc のクラスタ キャッシュをご覧ください。これにより、Cloud Storage 内のデータへのアクセス時間を短縮できます。

Spark のパフォーマンス向上は、クラスタまたは Spark ジョブで有効にできます。

  • クラスタで有効になっている Spark のパフォーマンス向上は、Dataproc サービスに送信された場合でも、クラスタに直接送信された場合でも、デフォルトでは、クラスタで実行されるすべての Spark ジョブに適用されます。

  • Spark のパフォーマンス向上は、Dataproc サービスに送信されるジョブで有効または無効にすることもできます。ジョブに適用される Spark パフォーマンス向上の設定は、指定されたジョブに対してクラスタレベルで設定された競合する設定をオーバーライドします。

料金

Spark のパフォーマンスの向上に追加料金はかかりません。標準の Compute Engine 上の Dataproc の料金が適用されます。

考慮事項

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、Dataproc API を使用して、イメージ バージョン 2.0.69 以降、2.1.17 以降、2.2.0 以降のイメージ リリースで Dataproc クラスタを作成するときに、Dataproc Spark のパフォーマンスを向上できます。

コンソール

  1. Google Cloud コンソールで、Dataproc の [クラスタの作成] ページを開きます。
  2. [Dataproc クラスタの作成] フォームで、[Compute Engine 上のクラスタ] 行の [作成] をクリックします。
  3. [Compute Engine で Dataproc クラスタを作成する] ページで [クラスタのカスタマイズ] パネルをクリックし、[クラスタ プロパティ] セクションまでスクロールします。
    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 など)を指定できます。ゾーンを指定しない場合、Dataproc の自動ゾーン プレースメント機能により、指定されたリージョン内のゾーンが選択されます。
    • IMAGE: Dataproc Spark オプティマイザーと実行パフォーマンスの向上は、Dataproc イメージ バージョン 2.0.69+2.1.17+、およびそれ以降のリリースで利用できます。このフラグを省略すると、クラスタのデフォルトの Dataproc on Compute Engine イメージの最新サブマイナー バージョンを選択します。クラスタのイメージ(デフォルトの Dataproc イメージ バージョンをご覧ください)。
    • 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、Dataproc API を使用して、Dataproc サービスに送信された Spark ジョブで Spark パフォーマンスの向上を有効または無効にできます。

コンソール

  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"