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

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

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

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

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

Dataproc Spark のパフォーマンス向上を有効にする方法

Google Cloud コンソール、Google Cloud CLI、Dataproc API を使用して、Dataproc on Compute Engine クラスタを作成するときや、Spark ジョブをクラスタに送信するときに、Dataproc Spark パフォーマンスを向上させることができます。

コンソール

クラスタ作成時に機能拡張を有効にする

Dataproc クラスタを作成するときに、Spark の最適化と実行強化を有効にするには、次の手順を実行します。有効化された機能拡張は、ジョブの送信時に特定のジョブの機能強化を無効にしない限り、クラスタに送信されたすべての Spark ジョブで有効なままです。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. 他のクラスタ作成フィールドの入力または確認が完了したら、[作成] をクリックします。

ジョブ送信時の機能拡張を有効にする

Spark ジョブで Spark の最適化と実行機能拡張を有効にするには、次の手順を実行します。Dataproc Spark のパフォーマンス向上は、機能拡張をジョブクラスタの作成時に有効にしたり、特定のジョブに対して有効にしたりしない限り、デフォルトで無効になります。

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

gcloud

クラスタ作成時に機能拡張を有効にする

Dataproc クラスタを作成するときに、Spark の最適化と実行強化を有効にするには、次の手順を実行します。有効化された機能拡張は、ジョブの送信時に特定のジョブの機能強化を無効にしない限り、クラスタに送信されたすべての Spark ジョブで有効なままです。Dataproc クラスタでは、Dataproc Spark のパフォーマンス向上はデフォルトで無効になっています。

  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 はクラスタのデフォルトの 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
      
      

ジョブ送信時の機能拡張を有効にする

Spark ジョブで Spark の最適化と実行機能拡張を有効にするには、次の手順を実行します。Dataproc Spark のパフォーマンス向上は、機能拡張をジョブクラスタの作成時に有効にしたり、特定のジョブに対して有効にしたりしない限り、デフォルトで無効になります。

  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
      

API

クラスタ作成時に機能拡張を有効にする

Dataproc クラスタを作成するときに、Spark の最適化と実行強化を有効にするには、次の手順を実行します。有効化された機能拡張は、ジョブの送信時に特定のジョブの機能強化を無効にしない限り、クラスタに送信されたすべての Spark ジョブで有効なままです。Dataproc クラスタでは、Dataproc Spark のパフォーマンス向上はデフォルトで無効になっています。

  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"
    

ジョブ送信時の機能拡張を有効にする

Spark ジョブで Spark の最適化と実行機能拡張を有効にするには、次の手順を実行します。Dataproc Spark のパフォーマンス向上は、機能拡張をジョブクラスタの作成時に有効にしたり、特定のジョブに対して有効にしたりしない限り、デフォルトで無効になります。

  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"