リソース管理

パイプラインを使用すると、ドライバと各エグゼキュータに割り当てる CPU とメモリを指定できます。リソースは、Cloud Data Fusion Studio のパイプラインの構成で構成できます。詳細については、パイプラインの構成を管理するをご覧ください。

このページでは、ユースケースに応じてドライバとエグゼキュータのリソースを構成する方法について説明します。

ドライバ

ドライバはあまり処理を行わないため、ほとんどのパイプラインを実行するには、デフォルトの 1 CPU と 2 GB のメモリで十分です。ステージや大規模なスキーマが多数含まれるパイプラインでは、メモリを増やす必要がある場合があります。JOIN の並列処理で説明したように、パイプラインでインメモリ結合を実行する場合は、インメモリ データセットもドライバのメモリに収まる必要があります。

エグゼキュータ

CPU リソースとメモリリソースに関する次のガイドラインを考慮してください。

CPU

エグゼキュータに割り当てられた CPU の数によって、エグゼキュータが並行して実行できるタスクの数が決まります。データの各パーティションの処理には 1 つのタスクが必要です。ほとんどの場合、CPU の数を 1 に設定し、メモリの調整に集中するのが最も簡単です。

メモリ

ほとんどのパイプラインでは、4 GB のエグゼキュータ メモリでパイプラインを正常に実行できます。極端な偏りのあるマルチテラバイト結合が、4 GB のエグゼキュータ メモリで完了しました。メモリ量を増やすことで実行速度を向上させることはできますが、そのためにはデータとパイプラインの両方を十分に理解する必要があります。

Spark はメモリを複数のセクションに分割します。1 つのセクションは Spark 内部用に予約され、もう 1 つのセクションは実行とストレージ用に予約されます。

デフォルトでは、ストレージと実行のセクションは合計メモリの約 60% です。この割合は、Spark の spark.memory.fraction configuration プロパティ(デフォルトは 0.6)で制御します。この量はほとんどのワークロードで良好に機能し、通常は調整する必要はありません。

ストレージと実行のセクションは、ストレージと実行の個別のスペースにさらに分割されます。デフォルトでは、これらのスペースは同じサイズですが、spark.memory.storageFraction を設定して調整し、ストレージ用に予約されるスペースの割合を制御できます(デフォルトは 0.5)。

ストレージ スペースには、キャッシュに保存されたデータが保存されます。実行スペースには、シャッフル、結合、並べ替え、集計データが保存されます。実行セクションに余分なスペースがある場合、Spark はその一部をストレージ データに使用できます。ただし、実行データはストレージ スペースをまったく使用しません。

パイプラインでデータがキャッシュに保存されていないことがわかっている場合は、ストレージの割合を減らして、実行要件に余裕を持たせることができます。

考慮事項: YARN コンテナのメモリ

エグゼキュータのメモリ設定は、エグゼキュータに割り当てられるヒープメモリの量を制御します。Spark は、オフヒープ メモリ用に追加のメモリを追加します。これは spark.executor.memoryOverhead 設定で制御され、デフォルトは 384m です。つまり、YARN が各エグゼキュータ用に予約するメモリ量は、パイプライン リソース構成で設定された数よりも大きくなります。たとえば、エグゼキュータのメモリを 2,048 m に設定すると、Spark はその数に 384 m を追加し、2, 432 m のコンテナを YARN にリクエストします。さらに、YARN はリクエスト数を yarn.scheduler.increment-allocation-mb の倍数に切り上げます。デフォルトでは yarn.scheduler.minimum-allocation-mb の値です。512 に設定されている場合、YARN は 2432 m を 2560 m に切り上げます。値が 1,024 に設定されている場合、YARN は 2,432 m を 3,072 m に切り上げます。この点は、クラスタ内の各ワーカーノードのサイズを決定するときに役立ちます。