2017-12-21 27 views
1

私たちは糸クラスター上でスパークジョブを実行し、十分なリソースがない場合でもスパークジョブが開始することを発見しました。SparkアプリケーションがYARNで起動する前にすべてのエグゼキュータが割り当てられるまで待つ方法を教えてください。

極端な例として、スパークジョブは1000人のエグゼキュータ(4つのコアと20GB RAM)を要求します。そしてクラスタ全体では、r3.xlarge(4コアと32GB RAM)のノードが30個しかありません。実際には、30人のエグゼキュータだけで作業を開始して実行できます。 動的割り当てをfalseに設定しようとしましたが、容量スケジューラと糸の公平スケジューラの両方を試しました。それは同じだ。

私たちは十分なリソースなしで仕事を始めることができないどのようなアイデアですか?これにはスパークサイドかヤーンサイドの設定がありますか?

答えて

1

私はちょうどa very similar questionと答えているようです。


使用可能なすべてのリソースを待つと、すぐに数がだけで十分なでタスクを開始すると起動したくないユースケースを考えてみて。

Spark on YARNには、アプリケーションがタスクの実行を開始する前に要求されたコアの最小80%の余分なチェック(別名minRegisteredRatio)があります。

Sparkアプリケーションを開始する前にすべてのコアを使用可能にしたいので、比率を制御するにはspark.scheduler.minRegisteredResourcesRatio Sparkプロパティを使用します。 (鉱山を強調表示)the official Spark documentationを引用

spark.scheduler.minRegisteredResourcesRatio

0.8糸モードの

登録されたリソースの最小比予想(登録リソース/合計リソース(リソースは糸モードのエグゼキュータ、スタンドアロンモードのCPUコア、Mesosの粗粒度モード['spark.cores.max'の値eは、Mesosの粗粒度モードのために予想される合計のリソースです])がスケジューリングの開始前に待機するようにします。 0.0〜1.0の間の倍数として指定されます。。リソースの最小比率に達しているかどうかにかかわらず、スケジューリングが開始されるまで待機する最大時間はconfig spark.scheduler.maxRegisteredResourcesWaitingTimeによって制御されます。