注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
このページは、Foundry で利用可能な Spark プロファイルのリファレンスです。Spark とプロファイルの詳細については、以下を参照してください。
このファミリーのプロファイルは、spark.driver.cores の値を設定します。
この値は、Spark ドライバーに割り当てる CPU コア数を制御します。実際には、同じ Spark モジュール内で多数の Spark ジョブが同時に実行される特殊なケースを除き、この値をオーバーライドする必要はありません。
このファミリーのプロファイルは、spark.driver.memory の値を設定します。
この値は、Spark ドライバーの JVM に割り当てるメモリー量を制御します。大量のデータをドライバーに収集する場合や、大規模なブロードキャスト結合を実行する場合など、状況によってはこの値を増やす必要があります。
この設定が制御するのは JVM のメモリーのみで、Python プロセスで利用可能なメモリーではありません。Pandas を使用して変換を行うために大量のデータをローカルに取得する場合は、別のプロファイルが必要です。
このファミリーのプロファイルは、spark.executor.cores の値を設定します。
この値は、各 Spark エグゼキューターに割り当てる CPU コア数を制御し、それによって各エグゼキューターで同時に実行されるタスク数を制御します。実際には、通常のトランスフォームジョブでこの値をオーバーライドする必要はほとんどありません。
このファミリーのプロファイルは、spark.executor.memory の値と関連する設定を構成します。
この値は、各 Spark エグゼキューターの JVM に割り当てるメモリー量を制御します。このメモリーは、エグゼキューターで実行されるすべてのタスク(エグゼキューターのコア数のプロファイルで制御)間で共有されます。各 Spark タスクで処理するデータ量が非常に多い場合は、この値を増やす必要がある場合があります。
このファミリーのプロファイルは、spark.executor.memoryOverhead の値を設定します。
この値は、Spark エグゼキューターの JVM メモリーに加えて、各コンテナに割り当てるメモリー量を制御します。ジョブが JVM の外部で大量のメモリーを必要とする場合は、この値を増やす必要がある場合があります。
このファミリーのプロファイルは、spark.executor.instances の値と関連する設定を構成します。
この値は、ジョブの実行に要求するエグゼキューター数を制御します。この値を増やすと、並列で実行できるタスク数が増えます。そのため、使用するリソースが増える代わりに、パフォーマンスが向上します(ジョブに十分な並列性がある場合)。
実際には、組織の事情により非常に高速に実行する必要がある大規模なジョブでのみ、この値をオーバーライドする必要があります。
このファミリーのプロファイルは、spark.dynamicAllocation.enabled、spark.dynamicAllocation.minExecutors、spark.dynamicAllocation.maxExecutors の値を設定します。
この設定は、固定数ではなくエグゼキューター数の範囲を指定することで、ジョブの実行に要求するエグゼキューター数を制御します。Spark は、要求するエグゼキューター数を maxExecutors まで増やし、不要になったエグゼキューターを解放します。これは、必要なエグゼキューター数が常に一定ではない場合や、場合によっては起動時間を短縮する際に役立つことがあります。モジュールが要求した maxExecutors の数のエグゼキューターを受け取れる保証はありません。また、エグゼキューター数が変動するため、実行ごとにパフォーマンスが異なる場合があります。
実際には、動的割り当ての利点と欠点を十分に理解したうえで、大規模なジョブでのみこの設定をオーバーライドする必要があります。
このファミリーのプロファイルは、適応型クエリ実行(AQE)を有効または無効にします。
AQE を有効にすると、Spark は実行時にパーティション数を自動的に設定し、ビルドが高速化される可能性があります。これにより、パーティション数が少なすぎて並列性が不足することや、小さなパーティションが多すぎてオーバーヘッドが過剰になることを回避します。
AQE は、パーティションあたりの出力サイズを64 MB にすることで、バランスを取ることを目指します。たとえば、合計出力サイズが512 MB の場合、約8個のパーティションが生成されます。
このファミリーのファイルサイズプロファイルを使用して、目標サイズを増やすことができます。書き込まれたデータが Contour の分析などで頻繁に読み取られる場合は、128 MB 以上のパーティションサイズを推奨します。
処理負荷の高い UDF などにより、合計出力は小さくても計算に非常に時間がかかる場合は、AQE を無効にすることを検討してください。この場合、AQE によって並列性が低下し、計算が遅くなる可能性があります。
これらのプロファイルは、spark.task.cpus の値を設定します。これらは「その他」のプロファイルファミリーに属します。
この値は、各タスクに割り当てるコア数を制御します。実際には、この値をオーバーライドする必要はほとんどありません。ジョブの並列性を制御したい場合は、代わりにエグゼキューターのコア数を確認してください。
これらのプロファイルを使用して、Pandas と PySpark のデータフレーム間の変換で Arrow を有効または無効にします。Arrow を使用するには、トランスフォームが pyarrow パッケージに依存していることを確認してください。
Pandas データフレームを指定して spark.createDataFrame() を呼び出す場合や、toPandas() を呼び出す場合、Spark はすべての行をシリアライズして、
一方の形式からもう一方の形式に変換する必要があります。大規模なデータフレームでは、この処理は遅く、トランスフォームの
ボトルネックになる可能性があります。Pandas トランスフォームを使用する場合、このシリアライズはデータの読み取り時と書き込み時の両方で行われます。
Arrow は、より効率的なシリアライズ形式であり、この変換を大幅に高速化します(Arrow の Web サイト ↗ で報告されています)。
このファミリーのプロファイルは、Spark ジョブの実行方法に関する低レベルの詳細を制御します。
基盤となるマシンの CPU アーキテクチャに依存するライブラリを使用する場合、プロファイルを使用して、特定のアーキテクチャ上で Spark ジョブを強制的に実行できます。一部の環境では、AMD アーキテクチャのマシンにしかアクセスできません。ARM アーキテクチャのオーバーライドを使用するジョブは、そのような環境では成功しません。
KUBERNETES_OPEN_PORTS_ALL プロファイルは、Spark エグゼキューター間のネットワーク通信を有効にします。これは、分散モデル学習に必要です。
このプロファイルは、min、max、mean の値を含む列ごとの統計情報の計算を有効にします。このプロファイルはデフォルトで false に設定されています。つまり、列ごとの null 件数と、行数などのデータセットレベルのメトリクスのみが計算されます。
| プロファイルファミリー | プロファイル名 | Spark 設定 |
|---|---|---|
| ドライバーコア | DRIVER_CORES_SMALL | spark.driver.cores: 1 |
| ドライバーコア | DRIVER_CORES_MEDIUM | spark.driver.cores: 2 |
| ドライバーコア | DRIVER_CORES_LARGE | spark.driver.cores: 4 |
| ドライバーコア | DRIVER_CORES_EXTRA_LARGE | spark.driver.cores: 8 |
| ドライバーコア | DRIVER_CORES_EXTRA_EXTRA_LARGE | spark.driver.cores: 16 |
| ドライバーメモリー | DRIVER_MEMORY_SMALL | spark.driver.memory: 3g |
| ドライバーメモリー | DRIVER_MEMORY_MEDIUM | spark.driver.memory: 6g; spark.driver.maxResultSize: 4g |
| ドライバーメモリー | DRIVER_MEMORY_LARGE | spark.driver.memory: 13g; spark.driver.maxResultSize: 8g |
| ドライバーメモリー | DRIVER_MEMORY_EXTRA_LARGE | spark.driver.memory: 27g; spark.driver.maxResultSize: 16g |
| ドライバーメモリー | DRIVER_MEMORY_EXTRA_EXTRA_LARGE | spark.driver.memory: 54g; spark.driver.maxResultSize: 32g |
| ドライバーメモリーオーバーヘッド | DRIVER_MEMORY_OVERHEAD_SMALL | spark.driver.memoryOverhead: 1g |
| ドライバーメモリーオーバーヘッド | DRIVER_MEMORY_OVERHEAD_MEDIUM | spark.driver.memoryOverhead: 2g |
| ドライバーメモリーオーバーヘッド | DRIVER_MEMORY_OVERHEAD_LARGE | spark.driver.memoryOverhead: 4g |
| ドライバーメモリーオーバーヘッド | DRIVER_MEMORY_OVERHEAD_EXTRA_LARGE | spark.driver.memoryOverhead: 8g |
| ドライバーメモリーオーバーヘッド | DRIVER_MEMORY_OVERHEAD_EXTRA_EXTRA_LARGE | spark.driver.memoryOverhead: 16g |
| エグゼキューターコア | EXECUTOR_CORES_EXTRA_SMALL | spark.executor.cores: 1 |
| エグゼキューターコア | EXECUTOR_CORES_SMALL | spark.executor.cores: 2 |
| エグゼキューターコア | EXECUTOR_CORES_MEDIUM | spark.executor.cores: 4 |
| エグゼキューターコア | EXECUTOR_CORES_LARGE | spark.executor.cores: 6 |
| エグゼキューターコア | EXECUTOR_CORES_EXTRA_LARGE | spark.executor.cores: 8 |
| エグゼキューターメモリー | EXECUTOR_MEMORY_EXTRA_EXTRA_SMALL | spark.executor.memory: 1536m; spark.executor.memoryOverhead: 384m |
| エグゼキューターメモリー | EXECUTOR_MEMORY_EXTRA_SMALL | spark.executor.memory: 3g; spark.executor.memoryOverhead: 768m |
| エグゼキューターメモリー | EXECUTOR_MEMORY_SMALL | spark.executor.memory: 6g; spark.executor.memoryOverhead: 1536m |
| エグゼキューターメモリー | EXECUTOR_MEMORY_MEDIUM | spark.executor.memory: 13g; spark.executor.memoryOverhead: 2g |
| エグゼキューターメモリー | EXECUTOR_MEMORY_LARGE | spark.executor.memory: 27g; spark.executor.memoryOverhead: 3g |
| エグゼキューターのオフヒープメモリー比率 | EXECUTOR_MEMORY_OFFHEAP_FRACTION_MINIMUM | Share of memory to use for off-heap (an “Executor Memory“ profile must be set): 30% |
| エグゼキューターのオフヒープメモリー比率 | EXECUTOR_MEMORY_OFFHEAP_FRACTION_LOW | Share of memory to use for off-heap (an “Executor Memory“ profile must be set): 50% |
| エグゼキューターのオフヒープメモリー比率 | EXECUTOR_MEMORY_OFFHEAP_FRACTION_MODERATE | Share of memory to use for off-heap (an “Executor Memory“ profile must be set): 70% |
| エグゼキューターのオフヒープメモリー比率 | EXECUTOR_MEMORY_OFFHEAP_FRACTION_HIGH | Share of memory to use for off-heap (an “Executor Memory“ profile must be set): 80% |
| エグゼキューターのオフヒープメモリー比率 | EXECUTOR_MEMORY_OFFHEAP_FRACTION_MAXIMUM | Share of memory to use for off-heap (an “Executor Memory“ profile must be set): 90% |
| エグゼキューターメモリーオーバーヘッド | EXECUTOR_MEMORY_OVERHEAD_SMALL | spark.executor.memoryOverhead: 1g |
| エグゼキューターメモリーオーバーヘッド | EXECUTOR_MEMORY_OVERHEAD_MEDIUM | spark.executor.memoryOverhead: 2g |
| エグゼキューターメモリーオーバーヘッド | EXECUTOR_MEMORY_OVERHEAD_LARGE | spark.executor.memoryOverhead: 4g |
| エグゼキューターメモリーオーバーヘッド | EXECUTOR_MEMORY_OVERHEAD_EXTRA_LARGE | spark.executor.memoryOverhead: 8g |
| エグゼキューター件数 | KUBERNETES_NO_EXECUTORS | spark.kubernetes.local.submission: true; spark.sql.shuffle.partitions: 1 |
| エグゼキューター件数 | NUM_EXECUTORS_1 | spark.executor.instances: 1; spark.dynamicAllocation.maxExecutors: 1 |
| エグゼキューター件数 | NUM_EXECUTORS_2 | spark.executor.instances: 2; spark.dynamicAllocation.maxExecutors: 2 |
| エグゼキューター件数 | NUM_EXECUTORS_4 | spark.executor.instances: 4; spark.dynamicAllocation.maxExecutors: 4 |
| エグゼキューター件数 | NUM_EXECUTORS_8 | spark.executor.instances: 8; spark.dynamicAllocation.maxExecutors: 8 |
| エグゼキューター件数 | NUM_EXECUTORS_16 | spark.executor.instances: 16; spark.dynamicAllocation.maxExecutors: 16 |
| エグゼキューター件数 | NUM_EXECUTORS_32 | spark.executor.instances: 32; spark.dynamicAllocation.maxExecutors: 32 |
| エグゼキューター件数 | NUM_EXECUTORS_64 | spark.executor.instances: 64; spark.dynamicAllocation.maxExecutors: 64 |
| エグゼキューター件数 | NUM_EXECUTORS_128 | spark.executor.instances: 128; spark.dynamicAllocation.maxExecutors: 128 |
| エグゼキューター件数 | NUM_EXECUTORS_256 | spark.executor.instances: 256; spark.dynamicAllocation.maxExecutors: 256 |
| エグゼキューター件数 | NUM_EXECUTORS_512 | spark.executor.instances: 512; spark.dynamicAllocation.maxExecutors: 512 |
| 動的割り当て | DYNAMIC_ALLOCATION_DISABLED | spark.dynamicAllocation.enabled: false |
| 動的割り当て | DYNAMIC_ALLOCATION_ENABLED | spark.dynamicAllocation.enabled: true |
| 動的割り当て | DYNAMIC_ALLOCATION_MIN_2 | spark.dynamicAllocation.enabled: true; spark.dynamicAllocation.minExecutors: 2 |
| 動的割り当て | DYNAMIC_ALLOCATION_MIN_4 | spark.dynamicAllocation.enabled: true; spark.dynamicAllocation.minExecutors: 4 |
| 動的割り当て | DYNAMIC_ALLOCATION_MIN_8 | spark.dynamicAllocation.enabled: true; spark.dynamicAllocation.minExecutors: 8 |
| 動的割り当て | DYNAMIC_ALLOCATION_MIN_16 | spark.dynamicAllocation.enabled: true; spark.dynamicAllocation.minExecutors: 16 |
| 動的割り当て | DYNAMIC_ALLOCATION_MAX_8 | spark.dynamicAllocation.enabled: true; spark.dynamicAllocation.maxExecutors: 8 |
| 動的割り当て | DYNAMIC_ALLOCATION_MAX_16 | spark.dynamicAllocation.enabled: true; spark.dynamicAllocation.maxExecutors: 16 |
| 動的割り当て | DYNAMIC_ALLOCATION_MAX_32 | spark.dynamicAllocation.enabled: true; spark.dynamicAllocation.maxExecutors: 32 |
| 動的割り当て | DYNAMIC_ALLOCATION_MAX_64 | spark.dynamicAllocation.enabled: true; spark.dynamicAllocation.maxExecutors: 64 |
| 動的割り当て | DYNAMIC_ALLOCATION_MAX_128 | spark.dynamicAllocation.enabled: true; spark.dynamicAllocation.maxExecutors: 128 |
| 動的割り当て | DYNAMIC_ALLOCATION_ENABLED_1_2 | spark.dynamicAllocation.enabled: true; spark.dynamicAllocation.minExecutors: 1; spark.dynamicAllocation.maxExecutors: 2 |
| 動的割り当て | DYNAMIC_ALLOCATION_ENABLED_2_4 | spark.dynamicAllocation.enabled: true; spark.dynamicAllocation.minExecutors: 2; spark.dynamicAllocation.maxExecutors: 4 |
| 動的割り当て | DYNAMIC_ALLOCATION_ENABLED_4_8 | spark.dynamicAllocation.enabled: true; spark.dynamicAllocation.minExecutors: 4; spark.dynamicAllocation.maxExecutors: 8 |
| 動的割り当て | DYNAMIC_ALLOCATION_ENABLED_8_16 | spark.dynamicAllocation.enabled: true; spark.dynamicAllocation.minExecutors: 8; spark.dynamicAllocation.maxExecutors: 16 |
| 動的割り当て | DYNAMIC_ALLOCATION_ENABLED_16_32 | spark.dynamicAllocation.enabled: true; spark.dynamicAllocation.minExecutors: 16; spark.dynamicAllocation.maxExecutors: 32 |
| 動的割り当て | DYNAMIC_ALLOCATION_ENABLED_32_64 | spark.dynamicAllocation.enabled: true; spark.dynamicAllocation.minExecutors: 32; spark.dynamicAllocation.maxExecutors: 64 |
| 動的割り当て | DYNAMIC_ALLOCATION_ENABLED_64_128 | spark.dynamicAllocation.enabled: true; spark.dynamicAllocation.minExecutors: 64; spark.dynamicAllocation.maxExecutors: 128 |
| 動的割り当て | DYNAMIC_ALLOCATION_FAST_SCALE_DOWN | spark.dynamicAllocation.executorIdleTimeout: 10s |
| 動的割り当て | DYNAMIC_ALLOCATION_SLOW_SCALE_UP_2M | spark.dynamicAllocation.schedulerBacklogTimeout: 2m |
| シャッフルパーティション | SHUFFLE_PARTITIONS_SMALL | spark.sql.shuffle.partitions: 20 |
| シャッフルパーティション | SHUFFLE_PARTITIONS_MEDIUM | spark.sql.shuffle.partitions: 200 |
| シャッフルパーティション | SHUFFLE_PARTITIONS_LARGE | spark.sql.shuffle.partitions: 2000 |
| シャッフルパーティション | SHUFFLE_PARTITIONS_EXTRA_LARGE | spark.sql.shuffle.partitions: 20000 |
| 適応型クエリ実行 | ADAPTIVE_DISABLED | spark.sql.adaptive.enabled: false |
| 適応型クエリ実行 | ADAPTIVE_ENABLED | spark.sql.adaptive.enabled: true |
| 適応型クエリ実行 | ADVISORY_PARTITION_SIZE_MEDIUM | spark.sql.adaptive.enabled: true; spark.sql.adaptive.advisoryPartitionSizeInBytes: 128MB; spark.sql.adaptive.shuffle.targetPostShuffleInputSize: 128MB |
| 適応型クエリ実行 | ADVISORY_PARTITION_SIZE_LARGE | spark.sql.adaptive.enabled: true; spark.sql.adaptive.advisoryPartitionSizeInBytes: 256MB; spark.sql.adaptive.shuffle.targetPostShuffleInputSize: 256MB |
| RPC メッセージサイズ | RPC_MESSAGE_MAX_SIZE_512M | spark.rpc.message.maxSize: 512 |
| RPC メッセージサイズ | RPC_MESSAGE_MAX_SIZE_1G | spark.rpc.message.maxSize: 1024 |
| RPC メッセージサイズ | RPC_MESSAGE_MAX_SIZE_MAX | spark.rpc.message.maxSize: 2047 |
| レガシー | LEGACY_ALLOW_UNTYPED_SCALA_UDF | spark.sql.legacy.allowUntypedScalaUDF: true |
| レガシー | LEGACY_ALLOW_NEGATIVE_DECIMAL_SCALE | spark.sql.legacy.allowNegativeScaleOfDecimal: true |
| レガシー | LEGACY_ALLOW_HASH_ON_MAPTYPE | spark.sql.legacy.allowHashOnMapType: true |
| レガシー | LEGACY_NAME_NON_STRUCT_GROUPING_KEY_AS_VALUE | spark.sql.legacy.dataset.nameNonStructGroupingKeyAsValue: true |
| レガシー | LEGACY_ARRAY_EXISTS_NULL_HANDLING | spark.sql.legacy.followThreeValuedLogicInArrayExists: false |
| レガシー | LEGACY_ALLOW_AMBIGUOUS_SELF_JOIN | spark.sql.analyzer.failAmbiguousSelfJoin: false |
| レガシー | LEGACY_TIME_PARSER_POLICY | spark.sql.legacy.timeParserPolicy: LEGACY |
| レガシー | LEGACY_DATETIME_REBASE_MODE | spark.sql.legacy.avro.datetimeRebaseModeInRead: LEGACY; spark.sql.legacy.parquet.datetimeRebaseModeInRead: LEGACY; spark.sql.legacy.avro.datetimeRebaseModeInWrite: LEGACY; spark.sql.legacy.parquet.datetimeRebaseModeInWrite: LEGACY |
| レガシー | LEGACY_FROM_DAYTIME_STRING | spark.sql.legacy.fromDayTimeString.enabled: true |
| レガシー | LEGACY_DATETIME_STRING_COMPARISON | spark.sql.legacy.typeCoercion.datetimeToString.enabled: true |
| 日付と時刻 | TIME_PARSER_POLICY_CORRECTED | spark.sql.legacy.timeParserPolicy: CORRECTED |
| 日付と時刻 | SPARK_ALLOW_INT96_AS_TIMESTAMP | spark.sql.parquet.int96AsTimestamp: true |
| その他 | BUCKET_SORTED_SCAN_ENABLED | spark.sql.sources.bucketing.sortedScan.enabled: true |
| その他 | LAST_MAP_KEY_WINS | spark.sql.mapKeyDedupPolicy: LAST_WIN |
| その他 | CROSS_JOIN_ENABLED | spark.sql.crossJoin.enabled: true |
| その他 | SPECULATIVE_EXECUTION | spark.speculation: true; spark.speculation.interval: 1s; spark.speculation.multiplier: 4.0; spark.speculation.quantile: 0.9 |
| その他 | AUTO_BROADCAST_JOIN_DISABLED | spark.sql.autoBroadcastJoinThreshold: -1 |
| その他 | ALLOW_ADD_MONTHS | spark.foundry.sql.allowAddMonths: true |
| その他 | TASK_CPUS_2 | spark.task.cpus: 2 |
| その他 | TASK_CPUS_4 | spark.task.cpus: 4 |
| その他 | PYSPARK_ROW_FIELD_SORTING_ENABLED | spark.executorEnv.PYSPARK_ROW_FIELD_SORTING_ENABLED: true; spark.yarn.appMasterEnv.PYSPARK_ROW_FIELD_SORTING_ENABLED: true; spark.kubernetes.driverEnv.PYSPARK_ROW_FIELD_SORTING_ENABLED: true |
| その他 | PYSPARK_ROW_FIELD_SORTING_DISABLED | spark.executorEnv.PYSPARK_ROW_FIELD_SORTING_ENABLED: false; spark.yarn.appMasterEnv.PYSPARK_ROW_FIELD_SORTING_ENABLED: false; spark.kubernetes.driverEnv.PYSPARK_ROW_FIELD_SORTING_ENABLED: false |
| その他 | PYSPARK_ROW_SCHEMA_CORRUPTION_CHECK_DISABLED | spark.kubernetes.driverEnv.PYSPARK_CHECK_ROW_SCHEMA_CORRUPTION: false; spark.yarn.appMasterEnv.PYSPARK_CHECK_ROW_SCHEMA_CORRUPTION: false; spark.executorEnv.PYSPARK_CHECK_ROW_SCHEMA_CORRUPTION: false |
| その他 | SPARK_KYRO_REFERENCE_TRACKING_DISABLED | spark.kryo.referenceTracking: false |
| その他 | GEOSPARK | spark.foundry.build.stats.enabled: false |
| その他 | SPARK_REFERENCE_TRACKING_DISABLED | spark.cleaner.referenceTracking: false |
| その他 | ENABLE_COLUMN_STATS | spark.foundry.build.stats.enableColumnStats: false |
| その他 | MANAGED_PROFILE | 過去のジョブメトリクスに基づくプロファイルの自動最適化を有効にします |
| Arrow | ARROW_ENABLED | spark.sql.execution.arrow.enabled: true; spark.sql.execution.arrow.pyspark.enabled: true; spark.sql.execution.arrow.sparkr.enabled: true; spark.sql.execution.arrow.fallback.enabled: true; spark.sql.execution.arrow.pyspark.fallback.enabled: true |
| Arrow | ARROW_DISABLED | spark.sql.execution.arrow.enabled: false; spark.sql.execution.arrow.pyspark.enabled: false; spark.sql.execution.arrow.sparkr.enabled: false |
| Kubernetes | KUBERNETES_CPU_ARCHITECTURE_OVERRIDE_AMD64 | N/A |
| Kubernetes | KUBERNETES_CPU_ARCHITECTURE_OVERRIDE_ARM64 | N/A |
| Kubernetes の開放ポート | KUBERNETES_OPEN_PORTS_ALL | 分散モデルトレーニング用に Spark エグゼキューター間のネットワーク通信を有効にします |
| ローカル Spark | KUBERNETES_NO_EXECUTORS_SMALL | spark.kubernetes.local.submission: true; spark.sql.shuffle.partitions: 1; spark.kubernetes.driver.request.cores: 400m; spark.driver.cores: 1; spark.driver.memory: 3g; spark.driver.memoryOverhead: 768m |