注: 以下の翻訳の正確性は検証されていません。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は、パーティションごとに64MBのバランスの取れた出力サイズを目指します。例えば、合計出力サイズが512MBの場合、約8つのパーティションが作成されます。
このファミリーのファイルサイズプロファイルを使用して、ターゲットサイズを増やすことができます。書き込まれたデータが頻繁に読み取られる場合(例えば、Contour分析で)、128MB以上のパーティションサイズが推奨されます。
総出力が小さいが計算に非常に時間がかかる場合(例えば、コストの高いUDFのため)、AQEを無効にすることを検討するかもしれません。その場合、AQEは並列性を低下させ、計算を遅くする可能性があります。
このファミリーのプロファイルは、spark.task.cpus
の値を設定します。
これは各タスクに割り当てられるコア数を制御します。実際には、これを上書きする必要はほとんどありません。ジョブの並列性を制御したい場合は、エグゼキュータコアを検討すべきです。
これらのプロファイルを使用して、PandasとPySparkデータフレーム間の変換のためにArrowを有効または無効にします。Arrowを使用するには、トランスフォームがpyarrow
パッケージに依存していることを確認してください。
Pandasデータフレームを使用してspark.createDataFrame()
を呼び出す場合や、toPandas()
を呼び出す場合、Sparkはすべての行をシリアライズして、あるフォーマットから別のフォーマットに変換する必要があります。大きなデータフレームの場合、これは遅いプロセスであり、トランスフォームのボトルネックになる可能性があります。Pandasトランスフォームを使用する場合、このシリアライズはデータの読み取り時と書き込み時の両方で発生します。
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_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 |
タスク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; |