2

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

4

1 回答 1

4

在您的情况下,您可能只想忽略该警告;这实际上只是一个无害的警告,您的驱动程序确实在同一个集群上正确排队;当多个驱动程序在同一主机(dataproc 主机)上运行时,端口仅绑定到从 4040 开始的连续端口号。请注意,这并不表示后面的提交主动等待第一个完成;作业提交尝试在有资源的情况下同时运行。在 Dataproc 中,例如,如果您提交 100 个作业,您应该会看到其中有 10 个(取决于机器大小、集群大小等)立即在 YARN 中排队,其中几个(或全部)将成功获得足够的 YARN 容器开始运行,而其他容器仍在 YARN 中等待。完成后,Dataproc 将在资源可用时逐步将剩余的 90 个作业提交给 YARN。

目前没有对 YARN 队列的特殊支持,但如果您想在集群创建时自定义 YARN 队列,则支持:

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

(将gcloud 分隔符替换为;以通过逗号分隔的列表)和/或yarn-site.xml教程中概述的其他配置,然后您指定队列:

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

foo如果你定义了它,它会使用yarn-queue,并使用yarn-clustermode 以便驱动程序在 YARN 容器中运行。在这种情况下,您不会再遇到任何端口 4040 警告,但在yarn-cluster模式下,您也不会再stdout/stderr在 Dataproc UI 中看到您的驱动程序。

于 2016-04-08T18:19:32.020 回答