共享 Hive 元数据#

OushuDB 支持共享 Hive 的元数据,利用自身的执行器无缝使用Hive存储在HDFS上的数据。

前提条件 —— 准备 Hive 环境#

OushuDB 为了访问 Hive 元数据,需要 Hive 开启基于 Thrfit 模式的 HiveMetastore(HMS) 服务。若希望 OushuDB 以 Kerberos 方式访问 Hive,需要在 OushuDB Main 节点上部署 Kerberos 服务,并提供对应的 keytab 和 principal。

使用说明#

建立 Hive Schema#

OushuDB 会将 Hive 元数据映射成 Filespace,并通过将其 Database 绑定在 Tablespace 后,以 Schema 的形式存在。

1CREATE FILESPACE <filespace_name> ON hive ('hive://<hive.metastore.uri>');
2CREATE TABLESPACE <tablespace_name> ON '<hive_database>' FILESPACE <filespace_name>;
3CREATE SCHEMA <schema_name> TABLESPACE <tablespace_name>;

其中 hive.metastore.uri 即为 HMS 的 Thrfit 服务地址。

使用 Hive Schema#

Hive Schema 与 OushuDB 的其他 Schema 行为一致,用户可以通过 fully qualified name 来访问 Hive 的表,也可以将 Hive Schema 添加到 search_path 后以 unqualified name 访问。

跨 Hive 数据库查询#

OushuDB 支持跨 Hive Database 的联合查询。 用户可以将多个 Hive Database 映射成 OushuDB Tablespace 后使用。

以 Kerberos 方式访问#

OushuDB 通过配置文件 hdfs-client.xml 来统一管理所有访问外部服务所需要的 Kerberos 配置。用户需要在此文件中以 hive.metastore.uri 为服务地址配置 keytab、principal等相关信息。

开启 Hive 权限控制#

OushuDB 通过内置的权限控制用户是否能够使用 Hive Schema,若用户有权限使用此 Schema 则可以访问对应 HMS 下的全部信息。若追求更细粒度的权限控制,OushuDB 也可以依托 HiveServer2(HS2)提供 Hive 的权限控制。用户可以将 GUC —— external_catalog_hive_authorization 设置为 native 来开启此功能,开启此功能后还需要将 external_catalog_hs2_url 设置成 HS2 的服务地址。OushuDB 可以通过 Kerberos 或者 NOSASL 两种方式连接 HS2,如果用户在 hdfs-client.xml 中配置了 HS2 服务地址相关的 Kerberos 信息则会以 Kerberos 方式连接,否则以 NOSASL 方式连接。当需要关闭此功能时,只需要将 external_catalog_hive_authorization 设置为空。

示例#

假设 HMS 的 Thrfit 服务地址为 localhost:9083,我们通过 OushuDB 查询 Hive 的 dbtest 数据库中名为 t 的表:

1CREATE FILESPACE hfs ON hive ('hive://localhost:9083');
2CREATE TABLESPACE hts ON 'dbtest' FILESPACE hfs;
3CREATE SCHEMA hs TABLESPACE hts;
4SELECT * from hs.t;

注意事项#

  • OushuDB 仅支持访问 Hive 的 ORC、 PARQUET、TEXT 和 CSV 表格式。

  • OushuDB 不支持访问事务表、ACID 表。

  • OushuDB 仅支持标量的基本数据类型:smallint, int, bigint, boolean, float, double, string, binary, timestamp, decimal, date, varchar, char。

  • OushuDB 无法保证自身事务与 Hive 事务的并发。

  • OushuDB 仅支持读操作。

  • 仅 OushuDB 提供的 psql 可以通过 description 函数来获取 Hive 表的信息。

  • OushuDB 以 oushu 用户身份访问 hive 的 HDFS 文件,需要对 oushu 用户进行授权。

  • OushuDB 只支持与一个 HMS 服务通讯,暂时不支持 HA。

  • 访问开启 Kerberos 的 HMS 服务需要提供三段的 Service Principal 而不是两段的 User Principal。此两种 Principal 是独立的,不能相互替代。通常 Service Principal 中第二段的 instance 在 hive-site.xml 为 _HOST 需要手工替换为目标 HMS 服务的域名。此域名可以通过 host 命令获得。