問題: Apache Spark ジョブが maxResultSize 例外で失敗するProblem: Apache Spark Job Fails With maxResultSize Exception

問題点Problem

Spark ジョブが maxResultSize 例外で失敗します。A Spark job fails with a maxResultSize exception:

org.apache.spark.SparkException: Job aborted due to stage failure: Total size of serialized
results of XXXX tasks (X.0 GB) is bigger than spark.driver.maxResultSize (X.0 GB)

原因Cause

このエラーは、構成されたサイズ制限を超えたことが原因で発生します。This error occurs because the configured size limit was exceeded. サイズ制限は、すべてのパーティションにわたる Spark アクションのシリアル化された結果の合計に適用されます。The size limit applies to the total serialized results for Spark actions across all partitions. Spark アクションには、ドライバーノードへの collect()toPandas()、またはドライバーのローカルファイルシステムへの大きなファイルの保存などの操作が含まれます。The Spark actions include actions such as collect() to the driver node, toPandas(), or saving a large file to the driver local file system.

ソリューションSolution

場合によっては、ドライバーノードで大量のデータが収集されないように、コードをリファクタリングする必要があります。In some situations, you might have to refactor the code to prevent the driver node from collecting a large amount of data. コードを変更して、ドライバーノードが限られた量のデータを収集するようにしたり、ドライバーインスタンスのメモリサイズを増やしたりすることができます。You can change the code so that the driver node collects a limited amount of data or increase the driver instance memory size. たとえば、矢印を有効にした状態で toPandas を呼び出したり、ファイルを書き込んだり、大量のデータをドライバーに返す代わりにこれらのファイルを読み取ることができます。For example you can call toPandas with Arrow enabled or writing files and then read those files instead of collecting large amounts of data back to the driver.

必要に応じて、プロパティ spark.driver.maxResultSize を、クラスター Spark 構成の例外メッセージで報告された値よりも大きい値 <X>g 設定できます。If absolutely necessary you can set the property spark.driver.maxResultSize to a value <X>g higher than the value reported in the exception message in the cluster Spark configuration:

spark.driver.maxResultSize <X>g

既定値は4g です。The default value is 4g. 詳細については、「アプリケーションプロパティ」を参照してください。For details, see Application Properties

上限を設定すると、ドライバーでメモリ不足エラーが発生することがあります (spark.driver.memory と JVM のオブジェクトのメモリオーバーヘッドによって異なります)。If you set a high limit, out-of-memory errors can occur in the driver (depending on spark.driver.memory and the memory overhead of objects in the JVM). メモリ不足エラーを防ぐために、適切な制限を設定します。Set an appropriate limit to prevent out-of-memory errors.