2017-09-14 1 views
1

を示していますSparkジョブのさまざまな段階でCPU /コア/エグゼキュータを最適化するにはどうすればよいですか?絵下記のよう

enter image description here

マイスパーク仕事は三つの段階があります。

0. groupBy 
1. repartition 
2. collect 

ステージ0および1は、しかし、ステージ2は非常にCPU集中型で、かなり軽量です。

1つのSparkジョブの異なるステージに異なる構成を設定することはできますか?私は考えた

は、2つのサブものにこのスパークジョブを分離し、それはメモリに格納された全ての中間結果を有するスパークを使用する目的を破ります。そしてそれはまた、私たちの仕事の時間を大幅に延ばすでしょう。

どのようなアイデアをお願いしますか?

答えて

1

いいえ、実行時にスパークの設定を変更することはできません。一度SparkConfオブジェクトがスパークするために渡され、それがクローン化されていないと、もはやユーザーが変更することができ

注:SparkConfためdocumentationを参照してください。 Sparkは、実行時に構成を変更することをサポートしていません。


しかし、私は、これらの間に他の操作がない場合は、collectrepartitionを行う必要はありませんよね。 repartitionは、ノード上でデータを移動します。必要な操作がドライバノードにcollectであれば不要です。

0

私は、Shaidoのポイントとagrre。しかし、Spark 2.xには動的リソース割り当てと呼ばれるものが含まれています。ハイレベルで

https://spark.apache.org/docs/latest/job-scheduling.html#dynamic-resource-allocation

、スパークは、彼らはもはや使用されている場合執行を放棄していないし、それらが必要なときに執行を取得する必要があります。

これは、アプリケーションが動的に値を変更する代わりにspark.executor.instancesを

spark.executor.instancesを使用することができることspark.dynamicAllocation.enabledと互換性があることを意味します。 spark.dynamicAllocation.enabledとspark.executor.instancesの両方が指定されている場合は、動的割り当てがオフになります。および指定された数のspark.executor.instancesが使用されます。

関連する問題