Spark プロパティ

このドキュメントでは、Spark プロパティとその設定方法について説明します。Dataproc サーバーレスは、Spark プロパティを使用して、バッチ ワークロードに割り当てるコンピューティング リソース、メモリリソース、ディスク リソースを決定します。これらのプロパティ設定は、ワークロードの割り当ての使用量と費用に影響する可能性があります。詳細については、Dataproc Serverless の割り当てDataproc Serverless の料金をご覧ください。

Spark バッチ ワークロードのプロパティの設定

Google Cloud コンソール、gcloud CLI、または Dataproc API を使用して Dataproc サーバーレス Spark バッチ ワークロードを送信するときに、Spark プロパティを指定できます。

Console

  1. Google Cloud コンソールで、Dataproc の [バッチの作成] ページに移動します。

    Dataproc の [Create batch] に移動

  2. [プロパティ] セクションで [プロパティを追加] をクリックします。

  3. サポートされている Spark プロパティKey(名前)と Value を入力します。

gcloud

gcloud CLI バッチ送信の例:

gcloud dataproc batches submit spark
    --properties=spark.checkpoint.compress=true \
    --region=region \
    other args ...

API

サポートされる Spark プロパティで、RuntimeConfig.propertiesbatches.create リクエストの一部として設定します。

サポートされる Spark プロパティ

Dataproc Serverless for Spark では、ほとんどの Spark プロパティをサポートしていますが、YARN やシャッフル関連の Spark プロパティ(spark.master=yarnspark.shuffle.service.enabled など)はサポートしていません。Spark アプリケーション コードで YARN またはシャッフルのプロパティが設定されている場合、アプリケーションは失敗します。

ランタイム環境のプロパティ

Dataproc Serverless for Spark では、ランタイム環境を構成するために、次のカスタム Spark プロパティがサポートされています。

プロパティ 説明
spark.dataproc.driverEnv.EnvironmentVariableName ドライバ プロセスに EnvironmentVariableName を追加します。複数の環境変数を指定できます。

リソース割り当てプロパティ

Dataproc Serverless for Spark では、リソース割り当てを構成するために、次の Spark プロパティがサポートされています。

プロパティ 説明 デフォルト
spark.driver.cores Spark ドライバに割り当てるコア(vCPU)の数。有効な値: 4816 4
spark.driver.memory

Spark ドライバ プロセスに割り当てるメモリの量。サイズ単位の接尾辞(「m」、「g」または「t」)を付けた JVM メモリ文字列形式で指定されます。

ドライバのコアごとのドライバの合計メモリ(ドライバメモリのオーバーヘッドを含む)。これは、スタンダード コンピューティング階層の場合は 1024m7424m にする必要があります(プレミアム コンピューティング階層の場合は 24576m)。たとえば、spark.driver.cores = 4 の場合は 4096m <= spark.driver.memory + spark.driver.memoryOverhead <= 29696m です。

512m2g
spark.driver.memoryOverhead

Spark ドライバ プロセスに割り当てる追加の JVM メモリの量。サイズ単位の接尾辞(「m」、「g」または「t」)を付けた JVM メモリ文字列形式で指定されます。

これは、JVM オーバーヘッド、内部文字列、その他のネイティブ オーバーヘッドに関連するヒープ以外のメモリであり、PySpark ドライバ プロセスやコンテナで実行される他のドライバ以外のプロセスで使用されるメモリなど、他のドライバ・プロセスによって使用されるメモリを含みます。ドライバを実行するコンテナの最大メモリサイズは、spark.driver.memoryOverheadspark.driver.memory の合計によって決まります。

ドライバのコアごとのドライバの合計メモリ(ドライバメモリのオーバーヘッドを含む)は、スタンダード コンピューティング階層の場合は 1024m7424m にする必要があります(プレミアム コンピューティング階層の場合は 24576m)。たとえば、spark.driver.cores = 4 の場合は 4096m <= spark.driver.memory + spark.driver.memoryOverhead <= 29696m です。

10% のドライバ メモリです。ただし、PySpark バッチ ワークロードは除きます。これはデフォルトではドライバメモリの 40% になります。 512m2g
spark.dataproc.driver.compute.tier ドライバで使用するコンピューティング階層。プレミアム コンピューティング階層では、コアごとのパフォーマンスは上がりますが、課金レートは高くなります。標準 スタンダード、プレミアム
spark.dataproc.driver.disk.size サイズ単位の接尾辞(「k」、「m」、「g」、「t」)で指定されたドライバに割り当てられるディスク容量。 250GiB 以上の値を指定してください。 ドライバでプレミアム ディスク階層が選択されている場合、有効なサイズは 375g、750g、1500g、3000g、6000g、9000g です。 プレミアム ディスク階層と 16 個のドライバコアを選択した場合、最小ディスクサイズは 750g です。 コア当たりの100GiB 1024g2t
spark.dataproc.driver.disk.tier ドライバのローカル ストレージとシャッフル ストレージに使用するディスク階層。プレミアム ディスク階層では、IOPS とスループットのパフォーマンスは上がりますが、課金レートは高くなります。ドライバでプレミアム ディスク階層を選択した場合は、spark.dataproc.driver.compute.tier=premium を使用してプレミアム コンピューティング階層も選択する必要があります。また、spark.dataproc.executor.disk.size を使用してディスク容量を指定する必要があります。

プレミアム ディスク階層が選択されている場合、ドライバはシステム ストレージ用に 50 GiB のディスク容量を割り当てます。これはユーザー アプリケーションで使用できません。

標準 スタンダード、プレミアム
spark.executor.cores 各 Spark エグゼキュータに割り当てるコア(vCPU)の数。有効な値: 4816 4
spark.executor.memory

各 Spark エグゼキュータ プロセスに割り当てるメモリ量。サイズ単位の接尾辞(「m」、「g」、「t」)を有するJVM メモリ文字列形式で指定されます。

エグゼキュータのコアごとのエグゼキュータのメモリの合計(エグゼキュータ・メモリのオーバーヘッドを含む)は、スタンダード コンピューティング階層の場合は 1024m7424m にする必要があります(プレミアム コンピューティング階層の場合は 24576m)。たとえば、spark.executor.cores = 4 の場合は 4096m <= spark.executor.memory + spark.executor.memoryOverhead <= 29696m です。

512m2g
spark.executor.memoryOverhead

Spark エグゼキュータ プロセスに割り当てる追加の JVM メモリの量。サイズ単位の接尾辞(「m」、「g」または「t」)を付けた JVM メモリ文字列形式で指定されます。

これは、JVM オーバーヘッド、内部文字列、その他のネイティブ オーバーヘッドに使用されるヒープ以外のメモリであり、PySpark エグゼキュータのメモリと、コンテナ内で実行される他のエグゼキュータ以外のプロセスで使用されるメモリが含まれます。エグゼキュータを実行するコンテナの最大メモリサイズは、spark.executor.memoryOverheadspark.executor.memory の合計によって決まります。

エグゼキュータのコアごとのエグゼキュータのメモリの合計(エグゼキュータ・メモリのオーバーヘッドを含む)は、スタンダード コンピューティング階層の場合は 1024m7424m にする必要があります(プレミアム コンピューティング階層の場合は 24576m)。たとえば、spark.executor.cores = 4 の場合は 4096m <= spark.executor.memory + spark.executor.memoryOverhead <= 29696m です。

10% のエグゼキュータ メモリです。ただし、PySpark バッチ ワークロードは除きます。これはデフォルトではエグゼキュータ メモリの 40% になります。 512m2g
spark.dataproc.executor.compute.tier エグゼキュータで使用するコンピューティング階層。プレミアム コンピューティング階層では、コアごとのパフォーマンスは上がりますが、課金レートは高くなります。 標準 スタンダード、プレミアム
spark.dataproc.executor.disk.size サイズ単位の接尾辞(「k」、「m」、「g」、「t」)で指定された各エグゼキュータに割り当てられるディスク容量。 エグゼキュータのディスク容量は、シャッフル データや依存関係のステージングに使用される可能性があります。250GiB 以上の値を指定してください。 エグゼキュータでプレミアム ディスク階層が選択されている場合、有効なサイズは 375g、750g、1500g、3000g、6000g、9000g です。 プレミアム ディスク階層と 16 個のエグゼキュータ コアを選択した場合、最小ディスクサイズは 750g です。 コア当たりの100GiB 1024g2t
spark.dataproc.executor.disk.tier エグゼキュータのローカル ストレージとシャッフル ストレージに使用するディスク階層。プレミアム ディスク階層では、IOPS とスループットのパフォーマンスは上がりますが、課金レートは高くなります。エグゼキュータでプレミアム ディスク階層を選択した場合は、spark.dataproc.executor.compute.tier=premium を使用してプレミアム コンピューティング階層も選択する必要があります。また、spark.dataproc.executor.disk.size を使用してディスク容量を指定する必要があります。

プレミアム ディスク階層が選択されている場合、各エグゼキュータにはシステム ストレージ用に 50 GiB のディスク容量が割り当てられます。これはユーザー アプリケーションで使用できません。

標準 スタンダード、プレミアム
spark.executor.instances 割り当てるエグゼキュータの初期数。バッチ ワークロードが開始されると、自動スケーリングはアクティブなエグゼキュータの数を変更する可能性があります。22000 にする必要があります。

自動スケーリングのプロパティ

Dataproc サーバーレス自動スケーリングの構成に使用できる Spark プロパティのリストについては、Spark の動的割り当てのプロパティをご覧ください。

ロギング プロパティ

プロパティ 説明 デフォルト
spark.log.level 設定すると、ユーザー定義のログ設定がオーバーライドされ、Spark の起動時に SparkContext.setLogLevel() が呼び出されます。有効なログレベルは、ALLDEBUGERRORFATALINFOOFFTRACEWARN です。 INFODEBUG
spark.executor.syncLogLevel.enabled true に設定すると、SparkContext.setLogLevel() メソッドを通じて適用されるログレベルがすべてのエグゼキュータに伝播されます。 false truefalse
spark.log.level.PackageName 設定すると、ユーザー定義のログ設定がオーバーライドされ、Spark の起動時に SparkContext.setLogLevel(PackageName, level) が呼び出されます。有効なログレベルは、ALLDEBUGERRORFATALINFOOFFTRACEWARN です。 spark.log.level.org.apache.spark=error

スケジュール設定のプロパティ

プロパティ 説明 デフォルト
spark.scheduler.excludeShuffleSkewExecutors スケジュール時にシャッフル マップのスキューがあるエグゼキュータを除外します。これにより、シャッフル書き込みのスキューによって発生する長いシャッフル取得待ち時間を短縮できます。 false true
spark.scheduler.shuffleSkew.minFinishedTasks エグゼキュータで完了したシャッフル マップタスクの最小数。スケジューラは、この数を超えるタスクをスキューとして扱います。 10 100
spark.scheduler.shuffleSkew.maxExecutorsNumber スキューとして扱うエグゼキュータの最大数。偏向したエグゼキュータは、現在のスケジューリング ラウンドから除外されます。 5 10
spark.scheduler.shuffleSkew.maxExecutorsRatio スキューとして扱うエグゼキュータの合計の最大比率。スケジューリングから除外される実行者は、バイアスがあります。 0.05 0.1
spark.scheduler.shuffleSkew.ratio エグゼキュータで完了したシャッフル マップタスクの平均数に掛けて、スキューとして扱う値。 1.5 2.0

その他のプロパティ

プロパティ 説明
dataproc.diagnostics.enabled このプロパティを有効にして、バッチ ワークロードの失敗またはキャンセル時に診断を実行します。診断が有効になっている場合、ワークロードの完了後に診断が完了するまで、バッチ ワークロードではコンピューティング リソースが引き続き使用されます。診断用 tarball の場所を指す URI が Batch.RuntimeInfo.diagnosticOutputUri API フィールドに表示されます。
dataproc.gcsConnector.version このプロパティを使用して、Cloud Storage コネクタのバージョンにアップグレードします。このバージョンは、バッチ ワークロードのランタイム バージョンとともにインストールされるバージョンとは異なります。
dataproc.sparkBqConnector.version このプロパティを使用して、Spark BigQuery コネクタのバージョンにアップグレードします。このバージョンは、バッチ ワークロードのランタイム バージョンとともにインストールされるバージョンとは異なります(BigQuery コネクタを Dataproc Serverless for Spark とともに使用するを参照)。
dataproc.profiling.enabled このプロパティを true に設定して、Dataproc Serverless ワークロードのプロファイリングを有効にします。
dataproc.profiling.name このプロパティを使用して、Profiler サービスでプロファイルを作成するときに使用する名前を設定します。