为 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