2016-07-25 17 views
1

親愛なる仲間のApacheスパーク愛好家Apacheのスパーク -

遅いタスクを失敗を避けるためにどのように私は最近、スタンドアロンのスパーククラスタにODROID XU4コンピュータのカップルを回すことを目標に副業プロジェクトをキックオフ。

クラスタをセットアップした後、異機種マルチプロセッサに固有の問題が発生しました。スパーク・エグゼキュータのタスクは、8つのプロセッサーをすべて使用するとXU4上で非常に遅く実行されます。その理由は、以下の私の記事のコメントで述べたように、Sparkは遅いプロセッサで実行されたエグゼキュータを待たないということです。

http://forum.odroid.com/viewtopic.php?f=98&t=21369&sid=4276f7dc89a8d7825320e7f705011326&p=152415#p152415

一つの解決策は、少数のエグゼキュータのコアを使用し、LITTLEプロセッサを使用しないようにCPUアフィニティを設定することです。しかし、これは理想的なソリューションではありません。

遅いエグゼキュータからのフィードバックを少し待つようにSparkに依頼する方法はありますか?明らかに時間がかかりすぎるとパフォーマンスに悪影響を与えます。しかし、すべてのコアを活用することによる肯定的な効果は、否定的な効果を均衡させるべきです。

ありがとうございました!

答えて

1

@Dikeiの応答は、2つの潜在的な原因を強調していますが、問題が彼が疑うものではないことが判明しました。私は@TJVRと同じ設定をしており、ドライバがエグゼキュータからハートビートを失っていることが分かります。これに対処するために、私はspark-env.shに次を追加しました:

export SPARK_DAEMON_JAVA_OPTS="-Dspark.worker.timeout=600 -Dspark.akka.timeout=200 -Dspark.shuffle.consolidateFiles=true" 
export SPARK_JAVA_OPTS="-Dspark.worker.timeout=600 -Dspark.akka.timeout=200 -Dspark.shuffle.consolidateFiles=true" 

これはエグゼハートビートのデフォルトのタイムアウトを変更します。また、ext4ファイルシステムのパフォーマンスを改善するためにspark.shuffle.consolidateFilesをtrueに設定してください。これらのデフォルトの変更により、上記のコア使用量が増加し、エグゼキュータを頻繁に失うことはありませんでした。

+0

偉大な@clairewareを見つける。私は設定を適用し、たとえ8コアを使用しても、はるかに優れたパフォーマンスを得ました。しかし、2 - 3は最も安全な番号です。 – TJVR

+0

@TJVRコア数を増やすとRAMのオーバーヘッドが増え、2GBのXU4ボードではこれが重要になります。大規模なデータセットで作業している場合は、計算に使用できるRAMが増えるように1コアにダイヤルするのが最善です。しかし、私は小さなデータセットに対して2〜3のコアを作っています。 – kamprath

1

スパークが遅い執行を殺すことはありませんが、2つのケースで死んだとしてexecutorをマークします:

  1. ドライバーはしばらく心拍信号を受信しない場合(デフォルト:120秒):executorを定期的に(デフォルト:10秒間)、ハートビートメッセージを送信して、ドライバがまだ生存していることを通知する必要があります。ネットワークの問題や大規模なGCの一時停止は、これらのハートビートの発生を防ぐことができます。

  2. 実行者が、コードまたはJVMランタイムエラーの例外のためにクラッシュしました。これは、ほとんどの場合、GCの一時停止によるものです。私の意見で

は、それはおそらくあなたの緩徐executorを殺したことGCのオーバーヘッドだとドライバが異なるエグゼキュータでタスクを再実行する必要があります。この場合、データを小さなパーティションに分割して、各エグゼキュータが一度に処理するデータ量を減らすことができます。

第2に、テストなしでspark.speculationを 'true'に設定しないでください。それは理由のためにデフォルトで「偽」です、私はそれがいくつかのケースで良いより多くの害をするのを見ました。

最後に、以下の前提が成立しない可能性があります。

しかし、すべてのコアを使用することによる肯定的な効果は、否定的な効果とのバランスが取れているはずです。

低速のエグゼキュータ(straggles)は、ワークロードに応じてプログラムのパフォーマンスが大幅に低下する可能性があります。遅いコアを避けることが最良の結果をもたらすことは、まったく可能です。

+0

こんにちはDikei 洞察に感謝します。私はそれが問題を解決するかどうかを確認するために小さな仕事を試みます。 4個のODROIDXU4にはそれぞれ4個のリトルプロセッサーが搭載されているため、これらを使用しないと分析がスピードアップしますか?利用可能なコアの利用状況のように聞こえる。さまざまな設定をテストしてから、プロセッサのサブセットのみを使用して時間をかけます。 – TJVR

関連する問題