1. ホーム
  2. apache-spark

[解決済み】spark.driver.maxResultSizeとは何ですか?

2022-01-22 07:27:11

質問

レフ は言う。

各パーティションのシリアル化された結果の合計サイズの制限 Sparkアクション(例:collect)。最低でも1M、0を指定すると 無制限です。合計サイズがこの制限を超えると、ジョブは中断されます。 高い制限値を設定すると、ドライバでメモリ不足のエラーが発生する可能性があります( spark.driver.memoryおよびJVM内のオブジェクトのメモリオーバーヘッドに依存します)。設定 適切な上限値を設定することで、ドライバをメモリ不足のエラーから保護することができます。

この属性は具体的に何をするのでしょうか?私は最初、(メモリ不足のエラーで失敗するジョブと戦っているわけではないので)それを増やすべきだと思ったという意味です。

よく考えてみると、この属性はワーカーがドライバに送る結果の最大サイズを定義しているようなので、デフォルト(1G)のままにしておくのがドライバを保護する最善の方法でしょう。

しかし、この場合、ワーカーはより多くのメッセージを送信しなければならないので、オーバーヘッドは、ジョブが遅くなるだけでしょうか?


もし私の理解が正しければ、ワーカーが4Gのデータをドライバに送信したいと仮定した場合、ワーカーに spark.driver.maxResultSize=1G の場合、ワーカーは4つのメッセージを送信することになります(無制限の spark.driver.maxResultSize ). もしそうなら、私のドライバがYarnから暗殺されないようにするためにこの属性を増やすのは間違っているはずです。

しかし、まだ上記の疑問は残ります。つまり、1M(最小値)に設定した場合、最も保護的なアプローチになるのでしょうか?

解決方法は?

<ブロッククオート

Workerが4GのデータをDriverに送りたい場合、spark.driver.maxResultSize=1Gにすると、Workerは4つのメッセージを送ることになります(無制限のspark.driver.maxResultSizeでは1つではなく、4つ)。

いいえ、データの推定サイズが maxResultSize 与えられたジョブは中断されます。ここでの目標は、ドライバの損失からアプリケーションを保護することであり、それ以上ではありません。

<ブロッククオート

1M(最小値)に設定した場合、最も保護的なアプローチになるのでしょうか?

感覚的にはそうですが、実際には役に立たないことは明らかです。良い値は、アプリケーションを正常に進行させ、予期しない条件からアプリケーションを保護する必要があります。