支持 S3 兼容对象存储

https://blueprints.launchpad.net/sahara/+spec/sahara-support-s3

在使数据源和作业二进制文件“可插拔”方面所做的努力之后,应该可以引入对 S3 兼容对象存储的支持。这将是现有 HDFS、Swift、MapR-FS 和 Manila 存储选项的额外替代方案。

之前有一份关于此主题的规范,大约在 Icehouse 版本发布时存在,但此后的工作一直停滞不前:https://blueprints.launchpad.net/sahara/+spec/edp-data-source-from-s3

问题描述

Hadoop 已经提供了支持 s3a:///path URI 的文件系统库,因此在 Sahara 上支持 S3 兼容对象存储是一个合理的特性。

在 OpenStack 的世界中,许多云运营商选择 Ceph RadosGW 而不是 Swift。RadosGW 对象存储支持通过 Swift 或 S3 API 进行访问。此外,通过一些额外的配置,“原生”安装的 Swift 也可以支持 S3 API。对于某些用户,我们可能希望 Hadoop S3 库比 Hadoop Swift 库更受欢迎,因为它最近收到了多项增强,包括对更大对象和其他性能改进的支持。

此外,一些云用户可能希望使用其他 S3 兼容对象存储,包括

  • Amazon S3(包括 AWS 公共数据集)

  • LeoFS

  • Riak Cloud Storage

  • Cloudian HyperStore

  • Minio

  • SwiftStack

  • Eucalyptus

显然,添加对 S3 数据源的支持将开启一个全新的 Sahara 用例世界。

提议的变更

将添加一个“s3”数据源类型,通过 sahara.service.edp.data_sources 中的新代码。我们需要工具来验证 S3 URI,以及处理作业配置(访问密钥、密钥、端点、bucket URI)。

关于 EDP,除了定义新的数据源类型之外,不需要做太多工作,因为 Hadoop S3 库允许作业无缝地针对 S3 运行。

将进行类似的工作以启用“s3”作业二进制类型,包括编写“作业二进制检索器”代码。

虽然抽象的实现很简单,但很多工作来自仪表板、saharaclient、文档和测试。

替代方案

不要将 S3 作为 EDP 的数据源添加支持。由于 Hadoop S3 库已经包含在镜像中,无论此更改如何,用户都可以手动针对 S3 运行数据处理作业。我们可能希望将相关的 JAR 添加到 classpath 中,以方便用户使用。

数据模型影响

REST API 影响

无(模式中只有“s3”作为有效的数据源类型和作业二进制类型)

其他最终用户影响

部署者影响

开发者影响

Sahara-image-elements impact

在大多数镜像上,需要将 hadoop-aws.jar 添加到 classpath 中。通常,安装了 Hadoop(或相关组件)的镜像已经包含该 JAR。这项工作可能发生在从 SIE 到镜像打包的过渡期间,因此这项工作可能需要在两个地方完成。

Sahara-dashboard / Horizon 影响

数据源和作业二进制表单应支持 s3 类型,并提供访问密钥、密钥、S3 URI 和 S3 端点的字段。请注意,这有很多字段,实际上比我们为 Swift 提供的字段更多。这可能会对 saharaclient 产生一些影响。

实现

负责人

主要负责人

Jeremy Freudberg

其他贡献者

工作项

  • S3 作为数据源

  • S3 作为作业二进制文件

  • 确保镜像上存在 AWS JAR

  • 仪表板和 saharaclient 工作

  • 场景测试

  • 文档

依赖项

测试

我们可能需要场景测试(尽管我们没有为 Manila 提供测试)。

文档影响

没有什么不同寻常的,但重要的是要牢记用户和开发者的视角。

参考资料