2016-03-06 11 views
7

膨大な量のデータを持つスパークプログラムを実行する必要があります。私はスパークプログラムを最適化しようとしていて、スパークUIを使い、シャッフル部分を減らそうとしています。スパークのシャッフル・リードとシャッフル・ライトの違いは何ですか?

シャッフル読み取りとシャッフル書き込みの2つのコンポーネントがあります。私は彼らの用語に基づいて違いを理解することができますが、私はそれらの正確な意味を理解したいと思いますし、スパークのシャッフル読み取り/書き込みのどちらがパフォーマンスを低下させるのですか?

私はインターネット上で検索しましたが、詳細は確かではありませんでしたので、ここで説明できるかどうかを知りたいと思っていました。

+1

Sparkの最適化ヒント1つ:シャッフル回数を減らしてみてください。 – LiMuBei

答えて

2

私は最近、スパークの作業を開始しました。私は同じ種類の質問に対する答えを探していました。

1つのステージからのデータがネットワークを介して次のステージにシャッフルされると、次のステージを処理するエグゼクティブは、最初のステージのプロセスからtcpにデータを引き出します。私は、各ステージのシャッフル "書き込み"と "読み取り"メトリックが、特定のジョブのSpark UIに表示されていることに気付きました。ステージは潜在的に「入力」サイズ(例えば、HDFSまたはハイブテーブルスキャンからの入力)を有する可能性もある。

私は、別のステージに供給された1つのステージからのシャッフル書き込みサイズが、そのステージのシャッフル読み取りサイズと一致していないことに気付きました。私が正しく覚えていれば、最適化としてシャッフルデータを次のステージ/エグゼキュータに転送する前に、そのシャッフルデータに対して実行できる減速タイプの操作があります。おそらく、これはサイズの違いにつながり、したがって両方の値を報告することの妥当性につながるのかもしれません。

+0

こんにちは@Dranyar、私はそれが次の段階にデータを渡しているとは思わない、シャッフルはデータのローカリティを取得する操作の種類で任意のグループを実行するときに発生します。特定の操作のためのネットワーク上のデータ移動に関連するはずだと思います。どう思いますか? – Srini

+0

"あなたはそれが次の段階にデータを渡すだけではないと思いますか?"私は混乱しているかもしれません。 また、「データのローカリティを取得する」という意味がわかりません。タスクがパーティションの場所に対してローカルで実行されたかどうかをスパーク履歴UIが示すように見えます。 – Dranyar

5

シャッフル

を書く

リモート執行から読み取る

総シャッフルバイトとレコードが読みシャッフル読む

が(ローカルで読み取られたデータとデータの両方を含んで

UIツールチップから、

シャッフルで読み込むためにディスクに書き込まれたバイトとレコード将来のステージ

関連する問題