spill to disk
とshuffle write
について混乱しています。デフォルトのソートシャッフルマネージャーを使用して、パーティションレコードを集計および結合するためにappendOnlyMap
を使用しますよね?次に、実行メモリがいっぱいになると、マップのソートを開始し、それをディスクにスピルし、次のスピル(発生した場合)のためにマップをクリーンアップします。私の質問は次のとおりです。
ディスクへのスピル書き込みとシャッフル書き込みの違いは何ですか?それらは基本的にローカルファイルシステムでファイルを作成し、記録することから成ります。
許可が異なるため、Spillレコードはマップを通過するためソートされますが、マップから通過しないため、書き込みレコードはシャッフルされません。
ありがとう。
ジョルジョ
spill to disk
とshuffle write
は2つの異なるものです
spill to disk
-ホストからのデータ移動RAM to Host Disk-十分でない場合に使用RAM onあなたのマシン、そしてそれはそのRAMの一部をディスクに置きます
http://spark.Apache.org/faq.html
Sparkを使用するには、データがメモリに収まる必要がありますか?
いいえ。Sparkのオペレーターは、メモリに収まらない場合、データをディスクにこぼし、あらゆるサイズのデータで適切に実行できるようにします。同様に、メモリに収まらないキャッシュされたデータセットは、RDDのストレージレベルによって決定されるように、ディスクに書き出されるか、必要に応じてその場で再計算されます。
shuffle write
-Executor(s)から別のExecutor(s)へのデータ移動-データがexecutor間で移動する必要がある場合に使用されます(例:JOIN、groupByなどが原因)
より多くのデータはここにあります:
この問題の解決に役立つエッジケースの例:
データが1つのキーを実行すると仮定すると、groupByKeyを実行すると、すべてのデータが1つのパーティションに移動します。 Shuffle size
は9 * 128MB(9つのエグゼキューターは最後のエグゼキューターにデータを転送します)であり、エグゼキューターは100GBのRAMおよび1GBのデータのみを持っているため、spill to disk
はありません。
AppendOnlyMap について:
AppendOnlyMap
コードで記述されているように(上記を参照)-この関数は、追加のみの使用例に最適化された単純なオープンハッシュテーブルの低レベルの実装で、キーは削除されませんが、各キーの値は変更される場合があります。
2つの異なるモジュールが同じ低レベル関数を使用するという事実は、それらの関数が高レベルで関連していることを意味しません。