web-dev-qa-db-ja.com

spark.driver.maxResultSizeとは何ですか?

ref の意味:

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

この属性は正確に何をしますか?最初は(メモリ不足エラーのために失敗するジョブと戦っていないので)私はそれを増やすべきだと考えました。

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

しかし、この場合、ワーカーはより多くのメッセージを送信する必要があるため、オーバーヘッドはジョブが遅くなるだけです。


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

しかし、上記の質問はまだ残っています..1M(最小)に設定した場合、最も保護的なアプローチになるのでしょうか?

20
gsamaras

ワーカーが4Gのデータをドライバーに送信したい場合、spark.driver.maxResultSize = 1Gを使用すると、ワーカーは4つのメッセージを送信します(spark.driver.maxResultSizeが無制限の1つではありません)。

いいえ。データの推定サイズがmaxResultSizeより大きい場合、特定のジョブは中止されます。ここでの目標は、ドライバーの損失からアプリケーションを保護することです。

1M(最小)に設定すると、最も保護的なアプローチになりますか?

ある意味ではありますが、実際には実用的ではありません。適切な値を指定すると、アプリケーションは正常に続行できますが、予期しない状態からアプリケーションを保護できます。

27
zero323