在你的情況下,你可能想忽略該警告;它實際上只是一個無害的警告,你的驅動程序確實在同一個羣集上正確排隊;當多個驅動程序在同一個主機(dataproc主機)上運行時,端口只是bound to successive port numbers starting at 4040。請注意,這是而不是意思是後面的提交主動等待第一個完成;作業提交嘗試儘可能多地同時運行資源。在Dataproc中,如果你提交了100個作業,你應該會看到其中的10個(根據機器大小,簇大小等而變化)立即在YARN中排隊,其中幾個(或全部)將成功獲取足夠多的YARN容器開始運行,而另一些容器則保持在YARN中。完成後,隨着資源可用,Dataproc將逐漸遞增剩餘的90個工作給YARN。
目前有紗隊列沒有特殊的支持,但它如果你想在集羣創建時間來定製你的YARN隊列使用支持的功能:
gcloud dataproc clusters create --properties \
^;^yarn:yarn.scheduler.capacity.root.queues=foo,bar,default;spark:other.config=baz
(與;
更換gcloud delimiter穿過在教程概述像this one逗號分隔的列表)和/或附加yarn-site.xml
CONFIGS,然後您指定的隊列:
gcloud dataproc jobs submit spark --properties spark.yarn.queue=foo
雖然不會改變你對端口4040警告的看法。這是因爲默認設置是對Spark使用yarn-client
模式,這意味着驅動程序在主節點上運行,並且驅動程序提交不受YARN排隊。
您可以使用yarn-cluster
模式如下:
gcloud dataproc jobs submit spark --properties \
spark.master=yarn-cluster,spark.yarn.queue=foo
然後,它會使用foo
紗隊列,如果你定義它,以及使驅動程序在運行使用yarn-cluster
模式YARN容器。在這種情況下,您不再會遇到任何端口4040警告,但在yarn-cluster
模式下,您也無法再在Dataproc UI中看到驅動程序的stdout/stderr
。
謝謝你的解釋。你介意在將來某個時候更新dataproc的文檔嗎? ;-) – Frank
http://spark.apache.org/docs/latest/job-scheduling.html#configuring-pool-properties - 我想我會嘗試你的建議和游泳池配置一般到YARN。應該工作,但?! – Frank
它現在就像你自己描述的那樣工作。非常感謝你。有沒有辦法從SparkContext /正在運行的作業中的dataproc獲取jobId?我想保存結果以引用ApplicationId和JobId來涵蓋YARN和dataproc上下文。 – Frank