为 sahara 添加 EDP 作业调度能力

https://blueprints.launchpad.net/sahara/+spec/enable-scheduled-edp-jobs

本规格旨在允许在 sahara 中运行计划的 edp 作业。

问题描述

目前 sahara 仅支持一次性点击 edp 作业。但在许多用例中,我们需要计划的 edp 作业。因此,通过为 sahara edp 引擎添加计划能力,我们可以为不同的引擎(oozie,spark,storm 等)提供不同的实现。

提议的变更

在 sahara 基本 edp 引擎中定义 run_scheduled_job() 接口,然后将此接口实现到 oozie 引擎。(Spark 和 storm 引擎将在后续规格中草拟)

定义两种作业执行类型,指示作业执行。但我们不需要更改 API,而是可以将参数添加到作业配置中。Sahara 将根据作业执行类型运行不同类型的作业。在 api 请求中,用户应将 job_execution_type 传递到 job_configs 中。

两种作业执行类型:(1)basic。运行简单的单次 edp 作业,当前 sahara 实现 (2)scheduled。运行计划的 edp 作业

计划 edp 作业请求示例

POST /v1.1/{tenant_id}/jobs/<job_id>/execute

对于 oozie 引擎的计划 edp 作业实现,我们有如下更改

在运行作业之前,sahara 将创建一个 coordinator.xml 来描述作业,然后将其上传到 HDFS EDP 作业库文件夹。有了这个文件,sahara 调用 oozie 客户端提交此作业,作业将在计划的时间运行,作业状态将在 Horizon 页面上显示为“PREP”。当然,用户也可以在准备状态以及运行状态下删除此作业。

coordinator.xml 示例

对于 spark 和 storm 实现,现在没有实现,我们稍后会添加它们。

替代方案

(1)通过登录到 VM 并运行 oozie 命令手动运行 edp 作业。(2)用户可以创建 cron 作业

数据模型影响

REST API 影响

这里没有变化,我们可以使用当前的 API,POST /v1.1/{tenant_id}/jobs/<job_id>/execute 我们可以将 job_execution_type、开始时间传递到 job_configs 中给 sahara。

其他最终用户影响

部署者影响

开发者影响

Sahara-image-elements impact

Sahara-dashboard / Horizon 影响

在作业启动页面,添加文本框供用户输入作业开始时间,默认值为现在,以兼容当前实现

实现

负责人

主要负责人

luhuichun(lu huichun)

其他贡献者

工作项

  • 定义计划作业类型

  • 在 edp 引擎中运行作业前创建 coordinator.xml

  • 将 coordinator.xml 上传到作业的 HDFS 文件夹

  • 在 oozie 引擎中添加 run_schedule_job

  • 修改 sahara api 参考文档

  • 添加任务以在 api-site 上更新 WADL

依赖项

无。

测试

edp 引擎中的单元测试添加场景集成测试

文档影响

需要进行文档说明。

参考资料

oozie 计划和递归作业实现 https://oozie.apache.org/docs/4.0.0/CoordinatorFunctionalSpec.html