web-dev-qa-db-ja.com

なぜspark.yarn.executor.memoryOverheadを増やすのですか?

2つの大きなsparkデータフレームを結合しようとしていますが、このエラーが発生し続けます:

Container killed by YARN for exceeding memory limits. 24 GB of 22 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead.

これはsparkユーザーの間で一般的な問題のようですが、spark.yarn.executor.memoryOverheardが何であるかについての確かな説明を見つけることができないようです。場合によってはそれが一種のように聞こえますYARNがコンテナを強制終了する前のメモリバッファの容量(たとえば、10GBが要求されましたが、YARNは10.2GBを使用するまでコンテナを強制終了しません)。それ以外の場合は、完全にある種のデータアカウンティングタスクを実行するために使用されているようです。実行したい分析とは別に、私の質問は次のとおりです。

  • Spark.yarn.executor.memoryOverheadは何に使用されていますか?
  • エグゼキュータメモリ(またはエグゼキュータの数)の代わりにこの種のメモリを増やすことの利点は何ですか?
  • 一般に、spark.yarn.executor.memoryOverheadの使用量を減らすために実行できる手順はありますか(たとえば、特定のデータ構造、データフレームの幅の制限、より多くのメモリを備えたより少ないエグゼキュータの使用など)?
8
Fortunato

オーバーヘッドオプションは 構成ドキュメント でうまく説明されています:

これは、VMオーバーヘッド、インターン文字列、その他のネイティブオーバーヘッドなどを説明するメモリです。これは、エグゼキュータのサイズ(通常は6〜10%)とともに増加する傾向があります。

これには、JVM以外のゲスト言語(Python、Rなど)のいずれかを使用する場合のユーザーオブジェクトも含まれます。

2
Alper t. Turker