スパークプロセスでシャッフルが発生したときに、メモリ使用量が多すぎます。シャッフルが発生したときにSparkが使用して余りにも多くのメモリを取得するのはなぜですか?
図は、700MBのデータを使用し、3つのrdd.mapを使用した場合のメモリメトリックです。 は
と次の図は、メモリメトリックである(I監視ツールとして神経節を使用し、私のクラスタのちょうど3つのノードを示し、X軸は時間系列は、y軸はメモリ使用量を手段)すべて、あなたが見ることができるように
:私は、同じデータを使用し、3 rdd.groupBy、3 rdd.flatMap(groupBy1-> flatMap1-> groupBy2-> flatMap2-> groupBy3-> flatMap3順)を使用します3ノードのメモリの数は、私が700だけ使用してもかなり増えます(数GB) MBデータ。実際に私は8つのワーカーノードを持っており、8人のワーカーのすべてのメモリがかなり増えています。
rdd.mapにはシャッフルがないので、主な原因はシャッフルですが、rdd.groupByにはシャッフルがあると思います。この状況で
、私は3点以下の疑問:- なぜ、あまりにも多くのメモリ使用量がありますか? (私のワーカーノードすべてで700MBを使用すると15GB以上が使用されます)
- Sparkアプリケーションが終了する前に古いシャッフルの使用メモリが削除されていないのはなぜですか?
- メモリの使用量を減らす方法や、古いシャッフルで生成されたメモリを削除する方法はありますか?
P. - 私の環境:
- クラウドプラットフォーム:MSアズール(8つのワーカーノード)
- 仕様。 8コアCPU、16ギガバイトRAM
- 言語:1つのワーカーのJavaの
- スパークバージョン:1.6.2
- Javaバージョン:1.7(開発)、1.8(実行)
- ラン火花スタンドアロンで(ありません
(Writer)@KedarDixitあなたの素晴らしい情報をありがとう。 Spark.shuffle.consolidateファイルは、私が必要とするSparkプロパティの1つで、Spark 1.6からはもはや適用されません。他の代替プロパティはありますか?私はそれについてGoogleで検索するが、私はそれを見つけることができません。 – kangbok