如何在DataProc上运行Spark时排队新作业

时间:2016-04-08 17:44:50

标签: google-cloud-dataproc

如何向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一起使用的文档......?

1 个答案:

答案 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