2017-02-16 2 views

答えて

1
  • 前述のとおり、すべてのクラスタのリソースを利用するには、少なくとも1つのタスク/コアが必要です。
  • 各ステージ/タスクに必要な処理タイプに応じて、処理/データのスキューが発生する可能性があります。これは、パーティションを小さくする/パーティションを増やすことで軽減できます(例:他のエグゼキュータは30秒の短いタスクを10回実行できます)。
  • パーティションの数を増やしたい場合もあります(サイズやメモリの制限など)。

    並列処理のチューニングについては、この素晴らしい記事チェックアウト:http://blog.cloudera.com/blog/2015/03/how-to-tune-your-apache-spark-jobs-part-2/

更新:これは処理/データスキューを支援し、あなたをより良いクラスタの利用と高速ジョブの実行を与えることができますどのように (例えば、スクリーンショットを下のSpark UIからタスク間のスキューを見ることができます - 差分メディアンと最大タスク時間を参照してください):

2つのタスクを同時に実行できるクラスタがあるとします。

  • データ処理には1つのタスク(アイドルコアが1つ)で60分かかります。ジョブは60mかかります。
  • 2で分割すると、スキュー:Task1:45m、Task-2:15mのために見つかることがあります。仕事は45mかかる(30mは1アイドルコア)。
  • 4で分割した場合、タスク1:30m、タスク2:10m、タスク3:10m、タスク-4:10mが得られます。ジョブの所要時間は30mです(第1コアは30mで1タスク、残りはそれぞれ10mの小さなタスクを実行します)。 など

Skew: Max vs Median

+0

ちょうど私がデータスキューについてのポイントを理解することを確認するために:私は他のパーティションよりも大きいデータセットでパーティションを持っている場合、小さなパーティションにそれを壊すために、より効率的です大規模なパーティションが1つのタスクで処理されるのを待つのではなく、他のExecutorとTasksが並列に処理できます。私はあなたを正しく理解しましたか? – Glide

+0

はい。元の回答への更新を追加しました。 – Traian

+0

このような詳細な回答をいただきありがとうございます。 – Glide

関連する問題