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

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

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

提前致谢!

【问题讨论】:

    标签: google-cloud-platform cron google-cloud-dataproc google-cloud-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 会负责提交作业和删除集群。它还会对沿途的任何错误做出反应,因此当它完成时,资源(集群)总是 .清理干净。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-23
      • 1970-01-01
      相关资源
      最近更新 更多