注: 以下の翻訳の正確性は検証されていません。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 の分析で使用される場合、128MB 以上のパーティションサイズが推奨されます。
出力全体が小さいが、高価な UDF などのために計算に非常に時間がかかる場合は、AQE を無効にすることを検討してください。その場合、AQE は並列性を減らし、計算速度が遅くなる可能性があります。
このファミリのプロファイルでは、spark.task.cpus
の値を設定します。
これにより、各タスクに割り当てられるコア数が制御されます。実際には、これを上書きすることはほとんどありません。ジョブの並列性を制御したい場合は、エグゼキュータ コア を参照してください。
これらのプロファイルを使用して、Pandas と PySpark のデータフレーム間の変換に Arrow を有効または無効にします。Arrow を使用するには、Transform が pyarrow
パッケージに依存していることを確認してください。
spark.createDataFrame()
を Pandas データフレームで呼び出すか、toPandas()
を使用すると、Spark はすべての行をシリアル化して、1 つの形式から別の形式に変換する必要があります。大規模なデータフレームの場合、これは遅いプロセスであり、Transform のボトルネックになる可能性があります。Pandas Transform を使用する場合、このシリアル化はデータの読み取りと書き込みの両方で発生します。
Arrow は、この変換を大幅に高速化する効率的なシリアル化形式です(Arrow ウェブサイト で報告されています)。
このファミリのプロファイルでは、Spark ジョブがどのように実行されるかの低レベルの詳細を制御します。
基盤となるマシンの CPU アーキテクチャに依存しないライブラリを使用している場合、プロファイルを使用して Spark ジョブを特定のアーキテクチャで実行するように強制できます。ただし、一部の環境では、AMD アーキテクチャのマシンのみにアクセスできるため、ARM アーキテクチャのオーバーライドを使用するジョブは、そのような環境では成功しないことに注意してください。
プロファイルファミリー | プロファイル名 | 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_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_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 |
タスクCPU数 | TASK_CPUS_2 | spark.task.cpus: 2 |
タスクCPU数 | TASK_CPUS_4 | spark.task.cpus: 4 |
ダイナミックアロケーション | 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_ENABLED | spark.sql.adaptive.enabled: true |
アダプティブクエリ実行 | ADAPTIVE_DISABLED | spark.sql.adaptive.enabled: false |
アダプティブクエリ実行 | ADVISORY_PARTITION_SIZE_MEDIUM | spark.sql.adaptive.enabled: true; spark.sql.adaptive.shuffle.targetPostShuffleInputSize: 128MB |
アダプティブクエリ実行 | ADVISORY_PARTITION_SIZE_LARGE | spark.sql.adaptive.enabled: true; 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 |
その他 | AUTO_BROADCAST_JOIN_DISABLED | spark.sql.autoBroadcastJoinThreshold: -1 |
その他 | ALLOW_ADD_MONTHS | spark.foundry.sql.allowAddMonths: true |
その他 | 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 |
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 |