Spark プロパティ

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

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

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

コンソール

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

    Dataproc の [バッチの作成] に移動

  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 プロパティ

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

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

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

プロパティ 説明
spark.dataproc.driverEnv.ENVIRONMENT_VARIABLE_NAME ドライバ プロセスに ENVIRONMENT_VARIABLE_NAME を追加します。複数の環境変数を指定できます。
spark.executorEnv.ENVIRONMENT_VARIABLE_NAME ENVIRONMENT_VARIABLE_NAME/var> to the executor process. You can specify multiple environment variables. を追加

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

Serverless for Apache 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 にする必要があります。

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

Serverless for Apache Spark 自動スケーリングの構成に使用できる 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 コネクタを Apache Spark 用 Serverless とともに使用するを参照)。
dataproc.profiling.enabled このプロパティを true に設定すると、Apache Spark ワークロードのサーバーレスのプロファイリングが有効になります。
dataproc.profiling.name このプロパティを使用して、Profiler サービスでプロファイルを作成するときに使用する名前を設定します。
spark.jars このプロパティを使用して、ドライバとエグゼキュータのクラスパスに含める jar のカンマ区切りリストを設定します
spark.archives このプロパティを使用して、各エグゼキュータの作業ディレクトリに抽出されるアーカイブのカンマ区切りのリストを設定します。.jar、.tar.gz、.tgz、.zip がサポートされています。サーバーレス インタラクティブ セッションの場合は、インタラクティブ セッション/テンプレートの作成時にこのプロパティを追加します。