[EDP] 添加 Spark Shell Action 作业类型¶
https://blueprints.launchpad.net/sahara/+spec/edp-add-spark-shell-action
EDP Shell action 作业类型允许用户在他们的集群上运行任意 shell 脚本,从而提供了很大的灵活性,可以在不改变引擎或直接集群接口的情况下扩展 EDP 功能。本规范建议为 Spark 引擎添加此作业类型。
关于此功能的更多详细说明可以在 edp-add-oozie-shell-action 规范中找到,无需在此重复。
问题描述¶
虽然 Oozie 引擎现在支持 Shell actions,但 Spark 用户目前无法访问此作业类型。添加它将允许创建集群维护工具、预处理或后处理作业,这些作业可能难以在 Spark 本身中实现,或者从 shell 命令可以实现的任何其他用例,例如从 Sahara 数据源不支持的文件系统检索数据。
提议的变更¶
从接口的角度来看,Spark Shell action 的实现将几乎完全遵循 Oozie Shell action 的实现
Shell 作业需要在
mains中需要一个脚本二进制文件,该文件将被推送到集群的主节点并执行。Shell 作业可以选择性地允许将任意数量的文件二进制文件作为
libs传递,这些文件将被放置在脚本的工作目录中,并且可以在脚本执行时被脚本使用。configs将被允许,以允许 Sahara EDP 内部功能(substitute_data_source_for_uuid和subsitute_data_source_for_name将为此作业类型实现,就像 Oozie Shell actions 一样。)params键值对将作为环境变量传递给脚本(这些参数是传递到远程 ssh 客户端还是直接注入到脚本中,由实现者自行决定。)args将作为位置命令行参数传递给脚本。Spark 的 Shell 引擎将像主 Spark 引擎一样存储文件,在 /tmp/spark-edp/
job_name/job_execution_id下创建一个目录,其中将包含所有必需的文件和执行的输出。Spark Shell 引擎将重用
launch_command.py脚本(目前由主 Spark 引擎使用),该脚本将记录子进程的 childpid、stdout 和 stderr,以供记录。
Spark Shell actions 将在实现上与 Oozie Shell actions 不同,具体如下
由于 Spark 作业和恰好在 Spark 集群上运行的 Shell actions 差异很大,因此 Spark 插件将被修改为包含两个单独的引擎(通过基于作业类型的可扩展策略模式提供)。这些引擎的合理抽象由实现者自行决定。
configs值如果不是 EDP 内部的,将不会通过任何方式传递给脚本(因为没有中间引擎来对其进行操作。)Spark Shell actions 将以镜像的注册用户身份运行,就像 Spark 作业一样。由于集群和 VM 维护任务是此功能的预期用例的一部分,因此允许 sudo 访问 VM 是可取的。
替代方案¶
什么都不做。
数据模型影响¶
无。
REST API 影响¶
合并 Oozie Shell action 作业类型实现后无需进行其他更改。
其他最终用户影响¶
无。
部署者影响¶
无。
开发者影响¶
无。
Sahara-image-elements impact¶
无。
Sahara-dashboard / Horizon 影响¶
合并 Shell action 作业类型 UI 实现后无需进行其他更改。
实现¶
负责人¶
- 主要负责人
sgotliv
- 其他贡献者
egafford
工作项¶
为 Spark 插件添加一个 Shell 引擎,并重构此插件以根据作业类型提供适当的引擎分支。
添加一个 Spark Shell 作业的集成测试(如以前插件特定的 Shell 作业测试)。
更新 EDP 文档,以说明 Spark 插件支持 Shell 作业类型。
验证为 Oozie Shell 作业所做的 UI 更改是否足以支持 Spark 情况下的 Shell 作业类型(正如预期的那样)。
依赖项¶
此更改基于更改 [EDP] 添加 Oozie Shell 作业类型。
测试¶
单元测试,以覆盖 Spark Shell 引擎和插件内的适当引擎选择。
一个集成测试,以覆盖通过 Spark 插件运行简单的 shell 作业。
文档影响¶
需要更新 EDP 部分的文档。
参考资料¶
无。