web-dev-qa-db-ja.com

Spark YARNアカウントでPythonメモリ使用量を実行するにはどうすればよいですか?

ドキュメントを読んだ後、SparkがYARNアカウントでPythonメモリ消費のために実行されている方法がわかりません。

spark.executor.memoryspark.executor.memoryOverhead、またはどこにカウントされますか?

特に、spark.executor.memory=25Gspark.executor.cores=4のPySparkアプリケーションがあり、頻繁に発生しますメモリ制限を超えたためにコンテナがYARNによって強制終了されました。mapを実行するとエラーが発生しますRDD。かなり大量の複雑なPythonオブジェクトで動作するため、25GBではなく、重要な量のメモリを消費することが予想されます。重いもので使用するためにさまざまなメモリ変数を構成するにはどうすればよいですか? Pythonコード?

23
domkck

Pythonコードとこのプロパティ値/)が重いため、メモリを_spark.python.worker.memory_デフォルト(512m)に増やしてみます_spark.executor.memory_にはカウントされません。

pythonワーカープロセスごとに使用するメモリの量。JVMメモリ文字列と同じ形式(例:512m、2g)。メモリが集計がこの量を超えると、データがディスクに流出しますリンク

SparkでのExecutorMemoryOverheadの計算:

_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です。

PySpark Internals画像クレジット

追加リソース Apacheメーリングスレッド

13
mrsrinivas