ドキュメントを読んだ後、SparkがYARNアカウントでPythonメモリ消費のために実行されている方法がわかりません。
spark.executor.memory
、spark.executor.memoryOverhead
、またはどこにカウントされますか?
特に、spark.executor.memory=25G
、spark.executor.cores=4
のPySparkアプリケーションがあり、頻繁に発生しますメモリ制限を超えたためにコンテナがYARNによって強制終了されました。map
を実行するとエラーが発生しますRDD。かなり大量の複雑なPythonオブジェクトで動作するため、25GBではなく、重要な量のメモリを消費することが予想されます。重いもので使用するためにさまざまなメモリ変数を構成するにはどうすればよいですか? Pythonコード?
Pythonコードとこのプロパティ値/)が重いため、メモリを_spark.python.worker.memory
_デフォルト(512m)に増やしてみます_spark.executor.memory
_にはカウントされません。
pythonワーカープロセスごとに使用するメモリの量。JVMメモリ文字列と同じ形式(例:512m、2g)。メモリが集計がこの量を超えると、データがディスクに流出します。 リンク
_MEMORY_OVERHEAD_FRACTION = 0.10
MEMORY_OVERHEAD_MINIMUM = 384
val executorMemoryOverhead =
max(MEMORY_OVERHEAD_FRACTION * ${spark.executor.memory}, MEMORY_OVERHEAD_MINIMUM))
_
YARNとMesosのプロパティは_spark.{yarn|mesos}.executor.memoryOverhead
_です。
YARNは、sum ofexecutorMemoryOverhead
およびexecutorMemory
である要求よりも多くのメモリを使用しているプロセスを強制終了します。
指定されたイメージでは、pythonワーカーのプロセスは_
spark.python.worker.memory
_を使用し、_spark.yarn.executor.memoryOverhead
_ + _spark.executor.memory
_は特定のJVMです。
追加リソース Apacheメーリングスレッド