スパークの基本原則と特性シャッフル

記事によって「内部解析のスパークスケジューラ原則、」私たちが知っている、ジョブスケジューリング相は、マップの作業上流をやって、複数のDAGステージ、ステージに分割されますスパーク、下流のステージはまだ基本的にMapReduceのコンピューティングフレームワークである、やるべき仕事を減らします。マップ間のブリッジとしてシャッフル及び低減は、アプリケーション全体がシャッフルされ、その結果、ネットワーク・ディスク・リードのノード間で、配列が逆シリアル化することを含む、その間の入力に出力に対応するマップを、減少させ、IOとIOを書き込むなどします非常に高価なステージの動作時には、原理を理解するためには、最適化スパークスパークシャッフルアプリケーションに役立ちます。

スパークの基本原則と特性シャッフル

MapReduceのフレームワークを計算するように、スパークは、実質的にステージ境界分割ステージ、実行する前段マップタスク、複数の部分にそれぞれマップタスク計算結果データに対応するそれぞれをシャッフルする、シャッフル以下に示すDAGを達成します各後段のパーティション、および一時的にディスクに書き込まれたが、プロセスはシャッフルライトと呼ばれ、タスク下流ステージを低減行う、の各々は、すべての結果データを引っ張っタスクは、ネットワークを介してプロセスをパーティションマップタスク前段を指定減らしますビジネスロジックを減らす完成させるために、シャッフル読み取りと呼ばれます。栗のために、そこに各マップタスクはデータの1000部を与える前段マップタスク100、後段タスク1000減らす、このマップタスク100であり、1000は、タスクは、各タスクを低減する低減する場合マップタスク100に対応する上りデータの共有を引く、すなわち、第一プルので、すべてのマップタスクの結果データこと、最初のタスクを削減します。

IMG

位相マップ、ビジネス・ロジック、およびシャッフル書き込み処理をマップに加えて、このプロセスは直列化が関与し、他の時間のかかるディスクIO操作では、同様に、ビジネスロジックを削減するだけでなく、段階的に減らすフロントシャッフルは、プロセスを読んで、このプロセスは、ネットワークIO、操作などを消費するデシリアライゼーションの時間を必要とします。全体のプロセスは非常に高価なシャッフルされるように、実現に火花もまた、徐々に改善スパークshuffleを達成するために、反復のリリースバージョンで、改善するための最適化の多くを行ってシャッフルします。以下は、スパークシャッフルの進化の実装について詳しく説明します。

進化を達成SHUFFLEスパーク

以前のバージョンで火花1.1ハッシュシャッフルの方法により達成された、バージョンへのHadoopのMapReduceの1.1リファレンス実装はソートシャッフル、危険なシャッフル最適化メモリとCPUの使用を導入するバージョン1.5タングステンタングステン計画を導入し始め、 1.6並べ替えシャッフルを統一しますタングステン、自己認識シャッフルは、最新のバージョン2.0に、ハッシュシャッフルは、すべての道ソート統一実現をシャッフルし、すべてのシャッフルを削除されている、最善の方法を選択してください。以下は、実装進化スパークシャッフルのバージョンがあります。

IMG

ハッシュシャッフルV1

スパーク1.1の以前のバージョンでは、それはスパークハッシュシャッフル内部に達成され、その原理及び基本的な原理は、図3に示すように、実質的に前方の導入部で述べたように実質的に同じです。

IMG

後段千パーティションがある場合、位相マップ(シャッフル書き込み)において、各マップは、後段の各パーティションの一時ファイルを書き込む、各マップが生成される一時ファイル1000は、エグゼキュータは一般的であろうマップタスクは複数のマップタスク実行のMの実行は、下流のステージは、N個のパーティションを持っている場合は、エグゼキュータはM生成し、一時的な執行に存在しますので、ダウン、たくさんのファイルを実行するためのN個のファイルを。コアエグゼキュータにKがある場合一方、その後、エグゼキュータは、それがKのために適用されますが、同時にKタスク、この方法を実行することができ、パーティションの数より多くの執行を使い果たしにバインドされると、N個のファイルディスクリプタ書き込みハンドラはメモリ消費の多くをもたらす生成K * Nながら、ファイルディスクリプタ、。

段階を減らすがある場合減らし相(シャッフル読み取り)、それぞれすべてに対応するパーティションマップデータの一部を引っ張るようになりますタスクを減らすには、すべての一時ファイルが転送ネットワーク、準備ができて、その後executorが開きます。彼らは、ほかに、多数のファイル記述子を必要とする場所合成操作は、に格納されたネットワークデータ引っ張ってくるHashMap大量のデータ場合、マージ操作を容易OOM動作をもたらすことができます。

要約すると、ハッシュシャッフル単純ではあるが、特にナイーブは、データが大規模になると、より高速に実行するために少量のデータでは、基本的に崩壊しました。もちろん、シャッフルのこのバージョンは、以前のバージョンで火花があり、行って反復を持つバージョンは、より多くの成熟の実現をシャッフルします。

ハッシュシャッフルv2の

マップタスクでは、各パーティションには、導入の背後に、単一のエグゼキュータ上のファイルの数を減らすことを目的にファイルの数を減少させるために、N個のファイルを生成する必要があります言及しました。地図タスクエグゼキュータパーティションを1つだけ生成されたすべてのファイルに示され、マップタスクは、そのほとんどのNパーティションでファイルが各エグゼキュータに発生したことを、すべてのファイルがパーティションの下にマージされているのと同じ程度です。

IMG

そこエグゼキュータにKコアであるか、またはN * Kをオープンした場合、同様に、表面は、ファイルの数が減少するが、パーティションの数の後段にはNが大きい場合、それはまだ、各エグゼキュータのファイルのNの数を生成しますライターハンドラ、全体的に、あまりにも基本的ではない問題を解決するために。シャッフルはv1のバージョンと同じステージには改善しなかった読みのために、まだ簡単にOOMにつながります。

並び替えシャッフルV1

図に示すように、ハッシュシャッフルの上記欠点、シャッフルのHadoopのMapReduceを考慮1.1.0ソートシャッフルが、実装されて組み込まれたスパークバージョンについては、シャッフルソートレコードを行います。

IMG

地図相(シャッフル書き込み)において、係るパーティションIDおよびキーの順序に記録され、すべてのパーティションのデータを同一のファイルに書き込まれ、ファイル内のレコードはそれぞれ、第1の隔壁をソート順に従って、パーティションIDでありますソート・キーの内部パーティションを実行する各パーティションマップタスクの順序の間に、書き込みデータに基づいて格納され、各パーティションのサイズとインデックスファイルを介して記録相殺されます。その結果、大幅にファイルの多数の問題を減少させる唯一のオープン2つのファイル記述子一度各マップタスク、書き込みデータ、書き込みインデックスは、K個のコアの実行者があってもハッシュシャッフル、記述子、ワンタイムオープンの、最大K * 2ファイルディスクリプタ。

ときに行うコンバインタスク引っ張るデータを減らし、相(シャッフル読み込み)を減らすには使用されなくなりHashMap、代わりに使用してExternalAppendOnlyMap十分なメモリが書き込みディスクを磨くれる場合、堅牢性の保証のかなりの程度を組み合わせないときのデータ構造をそしてビッグデータでOOMの状況を回避。

全体的には、すべての欠点ハッシュシャッフルソートシャッフル解くようだが、それはパフォーマンスのいくつかの損失ので、レコードをソートするために、プロセスのニーズをシャッフルする必要があるため。

安全でないシャッフル

スパーク1.5.0を開始する、スパークは、さらに、スパークの性能を高めるために、メモリとCPUの使用を最適化するために、平面タングステン(タングステン)を開始しました。このため、安全ではないシャッフルの導入のために、その実施は、他の一つは、メモリオーバーヘッドとGCを低減することができるように、Javaオブジェクトに直接バイナリデータソートの順序で、2値記録データに格納されていません一方shuffleで頻繁にシリアライズとデシリアライズのプロセスを避けるために。キャッシュ効率的ソーターを提供するソート処理において、ソートされた順序へのポインタを使用して8つのバイトは、ポインタ、ソート大幅に最適化された性能のアレイに変換されます。詳細についてはタングステンが移動喜ばdatabricksのブログを

しかし、安全でないシャッフルを使用すると、いくつかの制限があり、総シャッフル段階の操作を持つことができない、パーティションの数は、([画像ダンプ外側のリンクは、ソースステーションは、セキュリティチェーン機構を有していてもよい失敗した特定のサイズを超えることはできません、直接アップロード(IMG-X3FYwbPhダウン画像を保存することをお勧めしますreduceByKey集合体は、このような操作オペレータを有するように-1579616632985)(https://math.jianshu.com/math?formula=2%5E%7B24%7D-1)]、最大符号化可能paritionのIDです)、子供が安全でないシャッフルを使用することはできません、それはソートシャッフルを採用退化します。

並び替えシャッフルv2の

オペレータリゲット操作は安全でないシャッフル使用することはできません、それは退化ソートシャッフルを使用しています。

並び替えシャッフルv2の

スパーク-1.6.0を開始し、条件が危険なシャッフルは自動的に安全でないシャッフルを使用するか、またはソートシャッフルを採用する満足して検出された場合、ソートシャッフルと安全ではないシャッフルはすべて、シャッフルをソートするために統一。スパーク2.0.0を開始する、ハッシュシャッフル除去火花、すなわちソートシャッフル、シャッフル現時点で唯一のスパーク2.0を言うことができます。

リリース元の4件の記事 ウォンの賞賛0 ビュー514

おすすめ

転載: blog.csdn.net/The_Inertia/article/details/104066364