如何向Google Dataproc(PySpark)提交多个作业并将不适合当前执行者的作业排队?
仅提交作业不适用于排队,此处为以下任何作业的输出:
$ gcloud dataproc jobs submit pyspark myjob.py
...
WARN Utils:70 - Service 'SparkUI' could not bind on port 4040. Attempting port 4041
YARN应该为此目的采用“队列”参数。但是,我找不到任何关于将其与dataproc一起使用的文档......?
答案 0 :(得分:4)
在你的情况下,你可能只想忽略那个警告;它实际上只是一个无害的警告,你的驱动程序确实在同一个集群上正确排队;当多个驱动程序在同一主机(dataproc主服务器)上运行时,端口只是bound to successive port numbers starting at 4040。请注意,这不意味着后来的提交会主动等待第一个完成;作业提交尝试与资源同时运行。在Dataproc中,如果您提交100个作业,您应该会看到其中10个作业(根据机器大小,群集大小等不同而有所不同)立即在YARN中排队,并且其中几个(或全部)将成功获得足够的YARN容器开始运行,而其他容器仍在YARN中待定。完成后,Dataproc将在资源可用时逐步将剩余的90个工作提交给YARN。
目前还没有针对YARN队列的专业支持,但如果您想在群集创建时使用以下方式自定义YARN队列,则支持YARN队列:
gcloud dataproc clusters create --properties \
^;^yarn:yarn.scheduler.capacity.root.queues=foo,bar,default;spark:other.config=baz
(将gcloud delimiter替换为;
以传递以逗号分隔的列表)和/或其他yarn-site.xml
配置,如this one等教程中所述,然后您使用以下命令指定队列:
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-cluster
模式,以便驱动程序在YARN容器中运行。在这种情况下,您不再会遇到任何端口4040警告,但在stdout/stderr
模式下,您也无法再在Dataproc UI中看到驱动程序的Sub closeWorkbook()
Dim workbookToClose As Workbook
Application.DisplayAlerts = False
Set workbookToClose = Workbooks("WorkbookToClose.xls")
workbookClose.Close
Application.DisplayAlerts = True
End Sub
。