2016-05-14 8 views
5

私はSparkのFAIRスケジューリングモードの内部を理解したいと思います。事はそれ一つはofficial Spark documentationに応じて期待通りそう公平ではないようだということです。SparkでFairスケジューラを有効にするには?

スパーク0.8以降で、ジョブ間の公平な共有を設定することも可能です。公平な共有の下で、Sparkはジョブ間で「ラウンドロビン」方式でタスクを割り当てます。その結果、すべてのジョブがほぼ同等のクラスターリソースを占めるようになります。これは、長いジョブが実行されている間に提出された短いジョブはすぐにリソースを受け取ることができ、長いジョブが完了するのを待つことなく、良好な応答時間を得ることができることを意味します。このモードは、マルチユーザー設定に最適です。

ジョブが均等に処理されず、実際にはFIFO順で管理されているようです。

トピックに関する詳細情報を提供する:

私はYARNにスパークを使用しています。私はSparkのJava APIを使用します。公正なモードを有効にするには、コードは次のとおりです。

SparkConf conf = new SparkConf(); 
conf.set("spark.scheduler.mode", "FAIR"); 
conf.setMaster("yarn-client").setAppName("MySparkApp"); 
JavaSparkContext sc = new JavaSparkContext(conf); 

は、私が何かを見逃していましたか?

答えて

4

それはあなたがプールを設定していなかったとConfiguring Pool Propertiesで説明したように、すべてのジョブが単一defaultプールで終わる表示されます:

具体的なプールのプロパティも設定によって変更することができますがファイル。

以降

完全例では、研究会/ fairscheduler.xml.templateでも利用可能です。 XMLファイルで設定されていないプールは、すべての設定(スケジューリングモードFIFO、weight 1、およびminShare 0)のデフォルト値を取得するだけであることに注意してください。

介入なし:それははまた、あなたがFair Scheduler Poolsで説明したように与えられたジョブ(複数可)に使用するプールを設定するために地元のプロパティを設定していなかったということでき

新しくサブミットされたジョブはデフォルトのプールに入れられますが、ジョブのプールは、spark.scheduler.pool "ローカルプロパティ"をサブミットしているスレッドのSparkContextに追加することによって設定できます。

最後に、default FIFOプールを1つ使用すると、FIFOモードのプールの1つがプールなしのFIFOと比較して何も変更されません。

+0

デフォルトのプールジョブはパラレルで実行されますが、別のスレッドからサブミットされた場合、並列実行中です。単にジョブを並列化するためのプールを作成する必要はないと考えてください。 「各プールは、クラスターの等しいシェア(デフォルトプール内の各ジョブと同じになる)」http://spark.apache.org/docs/latest/job-scheduling.html#default-behavior-of -pools – spats

+0

無関係なステージの#CPUs>#タスクの場合は正しいです。 –

関連する問題