[EDP] 添加支持作业配置中 DataSource 标识符的选项¶
https://blueprints.launchpad.net/sahara/+spec/edp-data-sources-in-job-configs
在某些情况下,如果用户能够将 DataSource 对象作为作业配置值传递,以便利用对象中编码的数据,而不是手动复制和指定这些信息,将会非常方便。本规范描述了允许用户在 JobExecution 记录中的配置值、参数和参数中引用 DataSource 对象的可选项。
问题描述¶
除 Java 和 Spark 之外,Sahara 中的所有作业类型都接受单个输入 DataSource 对象和单个输出 DataSource 对象。DataSource 对象 ID 作为作业执行请求的一部分传递,Sahara 根据对象中的信息配置作业。Sahara 假设作业在运行时将使用固定的参数和配置值来消耗路径信息。这在 Oozie/hadoop 支持的受限作业类型(Hive、Pig、MapReduce)的通用情况下工作良好,但目前某些情况下可能未使用 DataSource 对象。
Java 和 Spark 作业类型不需要 DataSources,因为它们没有固定的参数列表。目前,输入和输出路径必须作为 URL 在
args列表中指定,并且必须手动指定身份验证配置,位于job_configs内部。使用多个输入或输出路径或通过自定义参数消耗路径的 Hive、Pig 和 MapReduce 作业需要手动配置。额外的路径或特殊配置参数(例如,超出 Sahara 假设的任何内容)需要在
args、params或configs元素内手动指定,位于job_configs内部。
允许在 job_configs 中引用 DataSources 是一项增量改进,它为用户提供了在上述情况下轻松使用 DataSource 对象来指定 IO 的选项。
提议的变更¶
在 JobExecution 上添加可选的布尔值配置值,这些值将导致 Sahara 将 job_configs 中的值视为 DataSource 对象的潜在名称或 UUID。这适用于所有作业类型的配置值、参数和参数,以实现最大的灵活性——Hive 和 Pig 作业使用参数传递值,MapReduce 使用配置值,而 Java 和 Spark 使用参数。
如果 Sahara 将某个值解析为 DataSource 的名称或 UUID,它将用 DataSource 中的路径信息替换该值,并根据需要更新作业配置以支持身份验证。如果某个值无法解析为 DataSource 名称或 UUID 值,则将使用原始值。
请注意,替换将在作业提交到集群时发生,但不会更改原始 JobExecution。这意味着如果用户重新启动 JobExecution 或检查它,将存在原始值。
以下非互斥配置值将控制此功能
edp.substitue_data_source_for_name (bool, 默认 False)
args列表、configs字典或params字典中的任何值,位于job_configs中,都可能是 DataSource 对象的名称。edp.substitute_data_source_for_uuid (bool, 默认 False)
args列表、configs字典或params字典中的任何值,位于job_configs中,都可能是 DataSource 对象的 UUID。
此更改可从所有接口使用:客户端、CLI 和 UI。UI 可能会以某种方式包装此功能,但这不是必需的。用户只需指定配置选项和作业执行配置面板上的 DataSource 标识符即可。
替代方案¶
可以采用略有不同的方法,即在 DataSource 名称或 UUID 前面加上前缀以标识它们。这将消除打开此功能的配置值的需要,并允许查找单个值而不是所有值。这将是明确的,但可能会降低可读性或对新用户不清楚。
数据模型影响¶
无
REST API 影响¶
无
其他最终用户影响¶
无
部署者影响¶
无
开发者影响¶
无
Sahara-image-elements impact¶
无
Sahara-dashboard / Horizon 影响¶
不需要。但是,我设想 UI 可能会从围绕此功能的一些简单工具中受益,例如在 Spark 或 Java 作业提交面板上启用该功能的复选框。
实现¶
负责人¶
- 主要负责人
<tmckay>
- 其他贡献者
<croberts>
工作项¶
Sahara 中的支持
文档
UI 中的支持(可选,即使没有额外工作也可以正常工作)
依赖项¶
测试¶
单元测试
文档影响¶
我们需要在涵盖向 Sahara 提交作业的部分中记录这一点