我目前有一个PySpark作业,该作业已部署在DataProc群集上(1个主节点和4个具有足够核心和内存的工作节点)。该作业运行在数百万条记录上,并执行昂贵的计算(多边形中的点)。我能够成功地独自完成这项工作。但是,我希望将作业安排在每个月的7号运行。
我正在寻找的是在DataProc群集上设置cron作业的最有效方法。我尝试阅读Cloud Scheduler,但并未完全说明如何将其与DataProc集群结合使用。看到DataProc上的cron作业示例或DataProc上的某些文档专门与Scheduler一起使用,将非常有帮助。
提前感谢!
请参阅其他答案以获取更全面的解决方案
[您要做的是从Cloud Scheduler发布事件以发布主题,然后让Cloud Function对事件进行反应。
以下是使用Cloud Function触发Dataproc的完整示例:How can I run create Dataproc cluster, run job, delete cluster from Cloud Function
对于计划的Dataproc交互(创建群集,提交作业,等待作业,删除群集,同时还处理错误),Dataproc的工作流模板API比尝试自己编排这些更好。一个关键优势是工作流程是一劳永逸的,创建的所有集群也将在完成时被删除。
如果您的工作流程模板相对简单,以至于其参数在两次调用之间不会更改,则更简单的计划方法是使用Cloud Scheduler
。如果您需要运行工作流以响应GCS中的文件或PubSub中的事件,则Cloud Functions
是一个不错的选择。最后,如果您的工作流程参数是动态的,或者混合使用其他GCP产品,则Cloud Composer
非常有用。
假设您的用例经常是具有相同参数的简单运行工作流程,我将使用Cloud Scheduler
进行演示:
我在我的项目中创建了一个名为terasort-example
的工作流程。
然后我在我的项目中创建了一个名为[email protected]
的新服务帐户,并赋予了它Dataproc Editor
角色;但是,仅用dataproc.workflows.instantiate
进行更多限制就足够了。
启用Cloud Scheduler
API之后,我转到开发人员控制台中的Cloud Scheduler。我创建了一个工作,如下所示:
目标:HTTP
HTTP方法:POST
正文:{}
Auth Header:OAuth令牌
服务帐户:[email protected]
范围:(左空白)
您可以通过单击Run Now
进行测试。
注意,您还可以将主体中的整个工作流内容复制为JSON有效负载。 URL的最后一部分将变为workflowTemplates:instantiateInline?alt=json