LoginSignup
21
22

More than 5 years have passed since last update.

Apache Spark - GC overhead limit exceeded の対処方法

Last updated at Posted at 2014-12-31

Sparkで大きなファイルを処理する際などに「java.lang.OutOfMemoryError: GC overhead limit exceeded」が発生する場合があります。
この際の対処方法をいかに記述します

GC overhead limit exceededとは

簡単にいうと

  • GCが処理時間全体の98%以上を占める
  • GCによって確保されたHeapが2%以下

の場合に発生します
潜在的なメモリリークに対応するため追加されたもののようですね

対応策1: 該当機能をOFFにする

一番簡単な方法は該当機能をOFFにすることです
/spark/conf配下にspark-defaults.conf.templateというファイルがあるので、これをspark-defaults.confにリネームします
(macユーザの方はFinder上でリネームするだけではなく、エディタで別名保存してくださいね)

そしてconf内に以下の文字列を加えてください

spark-defaults.conf
spark.executor.extraJavaOptions  -XX:-UseGCOverheadLimit

これによりJVMに該当オプションがわたり機能が無効化されます

対応策2: Heapを増やす

対応策1で該当機能をOFFにしましたが、これでは根本解決にはなっていません
そのためHeapを増やしたいと思います

JVMのHeapを増やしたいのであればオプションで渡すだけだから、上記Keyでいいのでは?と思いますがManualにはこんな記述があります

Note that it is illegal to set Spark properties or heap size settings with this option.(中略) Heap size settings can be set with spark.executor.memory.

というわけでここに指摘のあるspark.executor.memoryを増やしてあげましょう

spark-defaults.conf
spark.executor.memory  2g

これで解決です

ちなみにtemplate内にあるspark.driver.memoryですが、これはdriverプロセスに割り当てるものです
どちらもdefaultは512mなので合わせてあげると良いかと思います

21
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
22