2016-04-08 60 views
2

Google Dataproc(PySpark)にいくつかのジョブを提出して、現在のエグゼキュータに適合しないジョブをキューに入れる方法はありますか?DataProcでSparkを実行しているときに新しいジョブをキューに入れる方法

ここだけ、任意の以下のジョブの出力をキューイングするために動作しないジョブをサブミット:

$ gcloud dataproc jobs submit pyspark myjob.py 
... 
WARN Utils:70 - Service 'SparkUI' could not bind on port 4040. Attempting port 4041 

YARNは、この目的のために、「キュー」のパラメータを取る必要があります。しかし、私はdataprocでそれを使用することに関するドキュメントを見つけることができません...?

答えて

4

あなたの場合は、おそらく警告を無視するだけです。それは実際には無害な警告であり、ドライバーは実際には同じクラスター上で正しくキューに入れられています。複数のドライバが同じホスト(dataproc master)上で実行されている場合、ポートは単にbound to successive port numbers starting at 4040になります。これはではないことに注意してください。は、後の提出が最初から最後まで積極的に待機することを意味します。ジョブ提出は、リソースがあるのと同数だけ同時に実行しようとします。 Dataprocでは、100個のジョブを提出すると、それらのうちの10個(マシンサイズ、クラスタサイズなどによって異なる)がYARNにすぐにキューイングされ、いくつか(またはすべて)が正常に取得されます。十分なYARNコンテナが実行を開始し、他のコンテナはYARNに保留されたままです。彼らが完了すると、Dataprocは残りの90のジョブをリソースが利用可能になるとYARNに徐々に提出します。

gcloud dataproc clusters create --properties \ 
    ^;^yarn:yarn.scheduler.capacity.root.queues=foo,bar,default;spark:other.config=baz 

は(通過する;gcloud delimiterを置き換える:あなたが使用してクラスタ作成時に、あなたのYARNキューをカスタマイズしたい場合は、それがサポートされていますけれども

は、現時点ではYARNキューのための専門のサポートは、ありませんカンマ区切りのリスト)および/またはthis oneのようなチュートリアルで概説したように、追加yarn-site.xmlのconfigs、その後、あなたがしてキューを指定:それはないでしょうが

gcloud dataproc jobs submit spark --properties spark.yarn.queue=foo 

ポート4040に関する警告を変更してください。これはデフォルト設定がyarn-clientのモードをSparkに使用することです。つまり、ドライバプログラムはマスタノード上で実行され、ドライバ提出はYARNキューイングの対象にはなりません。次のように

あなたはyarn-clusterモードを使用することができます。

gcloud dataproc jobs submit spark --properties \ 
    spark.master=yarn-cluster,spark.yarn.queue=foo 

あなたはそれを定義した場合はドライバプログラムがAで実行されるように、それはyarn-clusterモードを使用するだけでなく、foo糸キューを使用しますYARNコンテナ。この場合、ポート4040の警告は表示されなくなりますが、yarn-clusterモードでは、Dataproc UIのドライバプログラムのstdout/stderrも表示されなくなります。

+0

ありがとうございます。将来的にdataprocのドキュメントを更新してもよろしいですか? ;-) – Frank

+0

http://spark.apache.org/docs/latest/job-scheduling.html#configuring-pool-properties - あなたの提案をYARNのプール設定一般と一緒にお試しいただきたいと思います。しかし、動作する必要がありますか? – Frank

+0

これは自分で説明したとおりに機能します。どうもありがとうございました。 SparkContext/runningジョブ内のdataprocからjobIdを取得する方法はありますか? ApplicationIdとJobIdを参照して結果を保存して、YARNとdataprocの両方のコンテキストをカバーしたいと思います。 – Frank

関連する問題