2

同時ジョブサーバー リクエストを送信すると、常に FIFO モードで処理されているように見えます。これは、FAIR スケジューラを有効にするために最善を尽くしたにもかかわらずです。リクエストが常に並行して処理されるようにするにはどうすればよいですか?

背景: 私のクラスターには、ユーザーがリクエストを送信してデータを処理できる SparkContext が 1 つあります。各リクエストは異なるデータ チャンクに対して動作する場合がありますが、操作は常に同じです。1 分間の小さなジョブは、1 時間の大きなジョブが完了するまで待つ必要はありません。

直感的には、次のことが起こると予想されます (以下の構成を参照してください)。 コンテキストは FAIR プール内で実行されます。ユーザーが何らかのデータを処理するリクエストを送信するたびに、Spark は公平なプールを分割し、その新しいリクエストを処理するためにクラスター リソースの一部を提供する必要があります。その後、各リクエストは他の同時リクエストと並行して FIFO モードで実行されます。

同時ジョブを実行すると実際に何が起こるかを次に示します。インターフェイスには「1 Fair Scheduler Pools」と表示され、「default」という名前のアクティブな (FIFO) プールが 1 つリストされます。すべてが FAIR プール内で単独で実行されている同じ FIFO プール内で実行されているようです。フェア プールの詳細が Spark の環境ページに正しく読み込まれていることがわかりますが、リクエストはすべて FIFO 方式で処理されます。

すべてのリクエストが実際に他のリクエストと並行して実行されるように、環境/アプリケーションを構成するにはどうすればよいですか? リクエストごとに個別のコンテキストを作成する必要がありますか? FAIR プール内に任意の数の同一の FIFO プールを作成し、リクエストが行われるたびに空のプールを何らかの方法で選択しますか? Jobserver の目的を考えると、これはすべて自動的に行われ、セットアップがそれほど複雑ではないように思われます。以下は、単純な間違いを犯した場合に備えて、構成の詳細です。

local.conf から:

contexts {
 mycontext {
   spark.scheduler.mode = FAIR
   spark.scheduler.allocation file = /home/spark/job-server-1.6.0/scheduler.xml
   spark.scheduler.pool = fair_pool
 }
}

scheduler.xml から:

<?xml version="1.0"?>
<allocations>
  <pool name="fair_pool">
    <schedulingMode>FAIR</schedulingMode>
    <weight>1</weight>
  </pool>
</allocations>

アイデアやポインタをありがとう。用語の混乱をお詫びします。ジョブ サーバーでは、「ジョブ」という言葉には 2 つの意味があります。

4

1 に答える 1

1

私は自分の構成を見ていて、それを見つけました

spark.scheduler.allocation ファイルは spark.scheduler.allocation.file である必要があります

すべての値は次のように引用されます

contexts {
  mycontext {
    spark.scheduler.mode = "FAIR"
    spark.scheduler.allocation.file = "/home/spark/job-server-1.6.0/scheduler.xml"
    spark.scheduler.pool = "fair_pool"
  }
}

また、mycontext が作成され、ジョブを送信するときに mycontext を渡していることを確認してください。

Spark Master UI を使用して、mycontext が FAIR スケジューラを使用しているかどうかを確認することもできます。

于 2016-08-25T02:52:11.440 に答える