在 Google Cloud DataProc 上安排 cron 作业

Posted

技术标签:

【中文标题】在 Google Cloud DataProc 上安排 cron 作业【英文标题】:Scheduling cron jobs on Google Cloud DataProc 【发布时间】:2020-03-13 17:36:23 【问题描述】:

我目前有一个 PySpark 作业部署在 DataProc 集群上(1 个主节点和 4 个工作节点,具有足够的核心和内存)。该作业在数百万条记录上运行并执行昂贵的计算(多边形中的点)。我能够自己成功地运行这项工作。但是,我想将作业安排在每月 7 日运行。

我正在寻找的是在 DataProc 集群上设置 cron 作业的最有效方法。我试图阅读 Cloud Scheduler,但它并没有准确解释它如何与 DataProc 集群结合使用。在 DataProc 上查看 cron 作业的示例或在 DataProc 上专门与 Scheduler 一起工作的一些文档将非常有帮助。

提前致谢!

【问题讨论】:

【参考方案1】:

对于计划的 Dataproc 交互(创建集群、提交作业、等待作业、删除集群同时处理错误),Dataproc 的工作流模板 API 是比尝试自己编排这些交互更好的选择。一个关键优势是工作流是即发即弃的,创建的任何集群也将在完成时被删除。

如果您的工作流模板相对简单,以至于它的参数在调用之间不会改变,那么更简单的调度方法是使用Cloud Scheduler。如果您需要运行工作流以响应 GCS 中的文件或 PubSub 中的事件,Cloud Functions 是一个不错的选择。最后,Cloud Composer 非常适合您的工作流程参数是动态的或混合使用其他 GCP 产品。

假设您的用例是使用相同参数的简单运行工作流,我将使用Cloud Scheduler 进行演示:

我在我的项目中创建了一个名为 terasort-example 的工作流。

然后我在我的项目中创建了一个新的服务帐户,名为workflow-starter@example.iam.gserviceaccount.com,并赋予它Dataproc Editor 角色;但是,仅使用 dataproc.workflows.instantiate 进行更多限制也足够了。

启用Cloud Scheduler API 后,我前往开发者控制台中的 Cloud Scheduler。我创建了一个工作如下:

目标:HTTP

网址:https://dataproc.googleapis.com/v1/projects/example/regions/global/workflowTemplates/terasort-example:instantiate?alt=json

HTTP 方法:POST

正文:

身份验证标头:OAuth 令牌

服务帐号:workflow-starter@example.iam.gserviceaccount.com

范围:(留空)

您可以点击Run Now进行测试。

请注意,您还可以将正文中的整个工作流内容复制为 JSON 有效负载。 URL 的最后一部分将变为workflowTemplates:instantiateInline?alt=json

查看此official doc 讨论其他调度选项。

【讨论】:

【参考方案2】:

请查看其他答案以获得更全面的解决方案

您需要做的是从 Cloud Scheduler 将事件发布到 pubsub 主题,然后让 Cloud Function 对该事件做出反应。

以下是使用 Cloud Function 触发 Dataproc 的完整示例: How can I run create Dataproc cluster, run job, delete cluster from Cloud Function

【讨论】:

谢谢!这非常有帮助。但是,Cloud Functions 的执行时间有限制。提供的最大执行时间为9 minutes。如果创建集群、在集群上运行作业然后删除集群的运行时间超过 9 分钟,则整个过程可能会失败。我能想到的解决方法是在每个步骤中使用多个 Cloud Functions(创建集群、运行作业、检查作业状态,最后在作业结束后删除集群)。这有意义吗? 这就是我建议使用 WorkflowTemplate 的原因。启动后,Dataproc API 会负责提交作业和删除集群。它还会对沿途的任何错误做出反应,因此当它完成时,资源(集群)总是 .清理干净。

以上是关于在 Google Cloud DataProc 上安排 cron 作业的主要内容,如果未能解决你的问题,请参考以下文章

无法在Google Cloud Dataproc上启动Apache Flink 1.7

来自 DataProc 集群的 Google Cloud Sdk

Google Cloud Dataproc 删除 BigQuery 表不起作用

在 Google Cloud Dataproc 上安装 pyspark 导致“搜索时找不到有效的 SPARK_HOME ['/tmp', '/usr/local/bin']”

Google Cloud Dataflow 和 Google Cloud Dataproc 有啥区别?

使用 google-cloud-python API 访问 Dataproc 时出现无效区域错误