2017-02-01 13 views
0

をクリアして、どのように私は私が上= 10 spark.dynamicAllocation.minExecutorsを使用したとき、私は火花動的割り当てを使用していますこの問題スパーク動的割り当てがキューイングされたタスク

を求めていますことに基づいて、その場で新しいVMを開くことができますデータスパークの突然のバーストは、非常にゆっくりと、新たな執行を開き、私はそれが新しい執行非常に速く、キューが

をクリアすることができます開く= 200
突然のバーストのラガー数に spark.dynamicAllocation.minExecutorsを変更したときに長い行列

になり

私の質問では、このような状況ではこれを高い値に設定する必要があります。

答えて

0

Vipin、私はあなたがそれを可能にし、エグゼキュータの分を設定見ることができるようにあなたは、スパークでダイナミックアロケーションを設定

。しかし、実行者が200人必要になると、割り当てにはspark.dynamicAllocation.schedulerBacklogTimeoutという1つの設定があります。これはデフォルトで1秒のタイムアウトを持ちます。

これは、1秒後にタスクが完了しなかった場合、より多くのエグゼキュータを割り当てることを意味します。

saprkでdocumentationによると、それは言う:ラウンドで

スパーク要求エグゼキュータを。実際の要求は、spark.dynamicAllocation.schedulerBacklogTimeout秒の保留中のタスクがあるときにトリガされます。その後、保留中のタスクのキューが存続する場合は、spark.dynamicAllocation.sustainedSchedulerBacklogTimeout秒後に再度トリガされます。さらに、各ラウンドで要求されたエグゼキュータの数は前回より指数関数的に増加します。たとえば、アプリケーションでは、第1ラウンドで1人のエグゼキュータを追加し、その後のラウンドでエグゼキュータを2人、4人、8人など追加します。

したがって、すべてのseccond Sparkでは、n秒間の遅延のために2^nを割り当てます。エグゼキュータを200人に達するには、エグゼクティブをヤーンに要求するために少なくとも8秒待つ必要があります。それを解決するには数秒で済む。

多分コアの数を増やすと役立つでしょう。しかし、あなたが各ノードの完全なコアを使用している場合...うーんthreは解決策ではありません。

+0

1 2 4 8のようなオープニングエグゼキュータの実装はプライベートですか? 私のシステムが新しいvmを開くように10 20 30を作ることができれば、私の問題として解決することができます – vipin

+0

まあ、私はコードをチェックしていました。それは私有であるようです。リンク:https://github.com/apache/spark/blob/6ee28423ad1b2e6089b82af64a31d77d3552bb38/core/src/main/scala/org/apache/spark/ExecutorAllocationManager.scala#L309を参照してください。 –

関連する問題