允许为 Storm 创建 Python 拓扑

为了允许用户开发我们可以将其作为 Storm 作业调用的纯 Python 形式的 Storm 拓扑,我们正在向 Sahara 中添加对 Pyleus 的支持。Pyleus 是一个框架,允许使用 Python 创建 Storm 拓扑,并使用 YAML 来配置流程的工作方式。

问题描述

https://blueprints.launchpad.net/sahara/+spec/python-storm-jobs

Storm 是 Sahara 中负责实时处理的插件。Storm 最初是用 Java 编写的,这是编写拓扑的常用语言。Storm 允许使用不同的语言编写拓扑,包括 Python,但默认实现方式仍然需要一个 Java shell 将 Python 组件组合在一起,这不太符合 Python 的风格。

提议的变更

我们是 OpenStack,我们热爱 Python,因此为了允许 OpenStack 用户创建和提交 Python 编写的拓扑,我们建议将 Pyleus 框架集成到 Storm 插件中。Pyleus 允许用户使用 Python 创建 Storm 拓扑组件,并提供抽象来帮助构建,使实现更容易。它还使用一个 YAML 文件来编译拓扑。编译的最终对象是一个包含 Python 编写的拓扑的 jar 文件。我们需要做的更改是将 pyleus 命令行集成到 Storm 插件中,以便使用其 CLI 提交拓扑,而不是 Storm 的 CLI。整体用户体验将保持不变,因为用户将上传一个 jar 文件并启动一个拓扑。我们将为 Storm 创建一种新的作业类型,称为 pyleus,以便插件可以处理将作业提交到集群的新方式。

命令行将如下所示

  • pyleus submit [-n NIMBUS_HOST] /path/to/topology.jar

  • pyleus kill [-n NIMBUS_HOST] TOPOLOGY_NAME

  • pyleus list [-n NIMBUS_HOST]

替代方案

另一种选择是保持 Storm 不变,仅接受默认作业 java 或 python。

数据模型影响

无。

REST API 影响

由于我们引入了一种新的作业类型,因此会对 REST API 产生轻微的影响。

其他最终用户影响

无。

部署者影响

无。

开发者影响

无。

Sahara-image-elements impact

我们需要在 Storm 镜像上安装 pyleus。

Sahara-dashboard / Horizon 影响

将进行一些小的更改以添加新的作业类型。

实现

负责人

主要负责人

tellesmvn

其他贡献者

工作项

  1. 创建新的作业类型。

  2. 修改 Storm 插件以处理新的作业类型。

  3. 为该功能实现测试。

依赖项

无。

测试

目前只会实现单元测试。

文档影响

此功能应在用户文档中记录。

参考资料

无。