現在、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個のジョインが好きなのは良いでしょうか?それはコードの可読性を低下させますが、私の問題を解決するのに役立つでしょうか?
ありがとう、
どのようなスパークバージョンを使用しますか? sparkのドライバJVMに渡される '-Xmx'パラメータ値を確認できますか? Visualvmを使ってドライバに接続しようとしましたが、どのオブジェクトが非常に多くのメモリを使用しているかを確認しましたか? – Mariusz
'spark.memory.fraction = 0.6'を確認してください。ガベージコレクションのエラーが発生した場合よりも高い場合は、https://stackoverflow.com/a/47283211/179014を参照してください。 – asmaier