2017-09-11 8 views
2

現在、PySparkで巨大なログを処理していますが、クラスタのメモリに問題があります。GCオーバーヘッドの上限をPySparkで超過しました

HTTP ERROR 500

Problem accessing /jobs/. Reason:

Server Error Caused by:

java.lang.OutOfMemoryError: GC overhead limit exceeded

ここに私の現在の設定です:

それは私に次のエラーgaves

spark.driver.cores 3 
spark.driver.memory 6g 
spark.executor.cores 3 
spark.executor.instances 20 
spark.executor.memory 6g 
spark.yarn.executor.memoryOverhead 2g 

まず、私は/私のスパークの仕事には何も持続キャッシュしません。

私はそれがmemoryOverheadの何かである可能性があることを読んだので、それを増やしたのです。しかしそれは十分ではないようです。 ガベージコレクタで問題が発生する可能性があることも読んでいます。そして、それは多くの異なるデータベースに対処しなければならないときに、ベストプラクティスとは何ですか?私はの多くはに参加しなければならない

、私はSparkSqlでそれをやっている、と私はTempViewsの多くを作成しています。それは悪い習慣ですか?巨大なSQLリクエストを作成し、1つのSQLリクエスト内で10個のジョインが好きなのは良いでしょうか?それはコードの可読性を低下させますが、私の問題を解決するのに役立つでしょうか?

ありがとう、

+0

どのようなスパークバージョンを使用しますか? sparkのドライバJVMに渡される '-Xmx'パラメータ値を確認できますか? Visualvmを使ってドライバに接続しようとしましたが、どのオブジェクトが非常に多くのメモリを使用しているかを確認しましたか? – Mariusz

+0

'spark.memory.fraction = 0.6'を確認してください。ガベージコレクションのエラーが発生した場合よりも高い場合は、https://stackoverflow.com/a/47283211/179014を参照してください。 – asmaier

答えて

0

まあ、私は私の問題を修正したと思います。それは約ブロードキャストについてだった。

私は私がジョインとしてはかなり大きいと思います、彼らはかなりの時間を必要とするので、私はして無効に放送をしました:

config("spark.sql.autoBroadcastJoinThreshold", "-1") 

問題は解決しそうです。

ありがとう、

関連する問題