2016-06-13 30 views
2

私はデータ処理のために本当に素晴らしい解決策を考えています。しかし、時にはログを見るだけでは必ずしも容易ではない「メモリ不足」エラーが発生することがあります。これらの問題を見つけて修正するための一般的な方法はありますか?提案された解決策として私が読んだことは、こことそこに調整のパラメータです。私には運が好きなように聞こえます。スパーク:一般的な「メモリ不足」エラーの一般的なベストプラクティス?

答えて

1
  • が正常スパークは、ネットワーク経由でデータを転送した場合、それがオブジェクトをシリアル化する必要が悪い入力データ
  • に対処するドライバーに大きなRDDのすべての要素をコピーしないでくださいGroupByKey
  • を避けてくださいバイナリ形式に変換します。これは、シャッフル時や大量のデータ転送が必要な他の操作では、パフォーマンスに影響を与える可能性があります。これを改善するには、まず、発生する可能性のあるシャッフルの量を最小限に抑えるようにコードを書き留めてください(例えば、groupByKeyを最後の手段として使用し、reduceByKeyのようなアクションを使用して、できるだけ)。次に、 オブジェクトのjava.io.Serializableの代わりにKryoを使用することを検討してください。標準のJavaシリアライザよりもコンパクトな バイナリ表現であり、圧縮または解凍も高速です。特に数十億ものオブジェクトを扱う場合、Kryoシリアライザを起動時にクラスに登録して、より貴重なバイトを節約することができます。
  • 大きなデータセット(> 200Gb)では、JVM Sparkの実行時のガベージコレクションがパフォーマンスの問題になることがあります。一般的に、デフォルトのParallelGCよりもG1 GCに切り替えると、最終的にパフォーマンスが向上します。ただし、データセットとアプリケーションの詳細に応じてチューニングが必要になります。上記に加えて
0

  1. は、入力サイズに基づいて、エグゼキュータのメモリを管理し、入力サイズがメモリに収まらないときは、ディスクやメモリのオプションを使用することができます
関連する問題