为 EDP 启用 Swift 持久 Hive 表,使用原生插件

https://blueprints.launchpad.net/sahara/+spec/edp-hive-vanilla-swift

vanilla1 插件支持 Hive,但 Hive 无法访问 Swift。vanilla2 插件不支持 Hive。本提案旨在使 Hive 能够处理存储在 Swift 中的表,并为 vanilla2 插件添加 Hive 支持。

问题描述

当 Hive 处理存储在 Swift 中的表时,hiveserver 必须访问 Swift。但 hiveserver 无法从 Hive 查询读取 SwiftFS 配置。 hiveserver 仅从 xml 文件(core-site.xml/hive-site.xml)读取配置。因此 hiveserver 不知道身份验证信息,无法访问 Swift。

在 vanilla2 插件中,尚未实现 Hive 支持代码。

提议的变更

hiveserver 仅在启动时读取配置,不会通过 Hive 查询读取配置。因此,Sahara 必须在启动 hiveserver 之前,通过 hive-site.xml 将 Swift 身份验证信息传递给 hiveserver

当启用 Hive 的集群创建时,Sahara 会创建 keystone TRUST 和 Swift 代理用户(集群范围)。并且 Sahara 在 hiveserver 启动之前,将 Swift 代理用户和 TRUST 写入 hive-site.xml。

这将使 hiveserver 能够在启动时读取身份验证信息。并且当 Hive 查询到达时,hiveserver 可以使用集群范围的 TRUST 访问 Swift。

当集群终止时,Sahara 会在集群的数据库条目删除之前删除 TRUST 和代理用户。如果删除 TRUST 时出现错误,集群将进入错误状态并且不会被删除。因此,不会留下孤立的代理用户。

在 vanilla2 插件中,参考 vanilla1 实现 Hive 支持代码。

替代方案

1. 将 auth 配置字段 (fs.swift.service.sahara.username, fs.swift.service.sahara.password) 添加到 hive-default.xml。并且让最终用户输入集群配置的用户名/密码。我认为这种替代方案非常不方便。

  1. 修复 hive-server 以从 Hive 查询读取配置。

数据模型影响

数据库模式:无变化

集群配置:变化。但不会影响其他配置

cluster-config 是字典。添加内部键并存储 Swift 代理用户信息和 TRUST-id。此键不会发送给客户端。

REST API 影响

其他最终用户影响

部署者影响

开发者影响

Sahara-image-elements impact

Sahara-dashboard / Horizon 影响

实现

负责人

主要负责人

k.oikw (Kazuki OIKAWA)

其他贡献者

工作项

  • 实现集群创建时创建代理用户/TRUST 功能

  • 实现集群配置的清理

  • 实现将代理用户和 TRUST 写入 hive-site.xml

  • 在 vanilla2 中实现 Hive 支持代码

依赖项

测试

我们将添加一个集成测试。此测试将检查 Hive 是否可以成功处理存储在 Swift 中的表。

文档影响

参考资料