Hive

通过连接 Hive Metastore,或者兼容 Hive Metatore 的元数据服务,Doris 可以自动获取 Hive 的库表信息,并进行数据查询。

除了 Hive 外,很多其他系统也会使用 Hive Metastore 存储元数据。所以通过 Hive Catalog,我们不仅能访问 Hive,也能访问使用 Hive Metastore 作为元数据存储的系统。如 Iceberg、Hudi 等。

使用限制

  1. hive 支持 1/2/3 版本。
  2. 支持 Managed Table 和 External Table。
  3. 可以识别 Hive Metastore 中存储的 hive、iceberg、hudi 元数据。
  4. 支持数据存储在 Juicefs 上的 hive 表,用法如下(需要把juicefs-hadoop-x.x.x.jar放在 fe/lib/ 和 apache_hdfs_broker/lib/ 下)。

创建 Catalog

  1. CREATE CATALOG hive PROPERTIES (
  2. 'type'='hms',
  3. 'hive.metastore.uris' = 'thrift://172.21.0.1:7004',
  4. 'hadoop.username' = 'hive',
  5. 'dfs.nameservices'='your-nameservice',
  6. 'dfs.ha.namenodes.your-nameservice'='nn1,nn2',
  7. 'dfs.namenode.rpc-address.your-nameservice.nn1'='172.21.0.2:4007',
  8. 'dfs.namenode.rpc-address.your-nameservice.nn2'='172.21.0.3:4007',
  9. 'dfs.client.failover.proxy.provider.your-nameservice'='org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider'
  10. );

除了 typehive.metastore.uris 两个必须参数外,还可以通过更多参数来传递连接所需要的信息。

如提供 HDFS HA 信息,示例如下:

  1. CREATE CATALOG hive PROPERTIES (
  2. 'type'='hms',
  3. 'hive.metastore.uris' = 'thrift://172.21.0.1:7004',
  4. 'hadoop.username' = 'hive',
  5. 'dfs.nameservices'='your-nameservice',
  6. 'dfs.ha.namenodes.your-nameservice'='nn1,nn2',
  7. 'dfs.namenode.rpc-address.your-nameservice.nn1'='172.21.0.2:4007',
  8. 'dfs.namenode.rpc-address.your-nameservice.nn2'='172.21.0.3:4007',
  9. 'dfs.client.failover.proxy.provider.your-nameservice'='org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider'
  10. );

同时提供 HDFS HA 信息和 Kerberos 认证信息,示例如下:

  1. CREATE CATALOG hive PROPERTIES (
  2. 'type'='hms',
  3. 'hive.metastore.uris' = 'thrift://172.21.0.1:7004',
  4. 'hive.metastore.sasl.enabled' = 'true',
  5. 'dfs.nameservices'='your-nameservice',
  6. 'dfs.namenode.rpc-address.your-nameservice.nn1'='172.21.0.2:4007',
  7. 'dfs.namenode.rpc-address.your-nameservice.nn2'='172.21.0.3:4007',
  8. 'dfs.client.failover.proxy.provider.your-nameservice'='org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider',
  9. 'hadoop.security.authentication' = 'kerberos',
  10. 'hadoop.kerberos.keytab' = '/your-keytab-filepath/your.keytab',
  11. 'hadoop.kerberos.principal' = 'your-principal@YOUR.COM',
  12. 'hive.metastore.kerberos.principal' = 'your-hms-principal',
  13. 'yarn.resourcemanager.address' = 'your-rm-address:your-rm-port',
  14. 'yarn.resourcemanager.principal' = 'your-rm-principal/your-rm-address@YOUR.COM'
  15. );

请在所有的 BEFE 节点下放置 krb5.conf 文件和 keytab 认证文件,keytab 认证文件路径和配置保持一致,krb5.conf 文件默认放置在 /etc/krb5.conf 路径。 hive.metastore.kerberos.principal 的值需要和所连接的 hive metastore 的同名属性保持一致,可从 hive-site.xml 中获取。

提供 Hadoop KMS 加密传输信息,示例如下:

  1. CREATE CATALOG hive PROPERTIES (
  2. 'type'='hms',
  3. 'hive.metastore.uris' = 'thrift://172.21.0.1:7004',
  4. 'dfs.encryption.key.provider.uri' = 'kms://http@kms_host:kms_port/kms'
  5. );

hive数据存储在JuiceFS,示例如下:

  1. CREATE CATALOG hive PROPERTIES (
  2. 'type'='hms',
  3. 'hive.metastore.uris' = 'thrift://172.21.0.1:7004',
  4. 'hadoop.username' = 'root',
  5. 'fs.jfs.impl' = 'io.juicefs.JuiceFileSystem',
  6. 'fs.AbstractFileSystem.jfs.impl' = 'io.juicefs.JuiceFS',
  7. 'juicefs.meta' = 'xxx'
  8. );

在 1.2.1 版本之后,我们也可以将这些信息通过创建一个 Resource 统一存储,然后在创建 Catalog 时使用这个 Resource。示例如下:

  1. # 1. 创建 Resource
  2. CREATE RESOURCE hms_resource PROPERTIES (
  3. 'type'='hms',
  4. 'hive.metastore.uris' = 'thrift://172.21.0.1:7004',
  5. 'hadoop.username' = 'hive',
  6. 'dfs.nameservices'='your-nameservice',
  7. 'dfs.ha.namenodes.your-nameservice'='nn1,nn2',
  8. 'dfs.namenode.rpc-address.your-nameservice.nn1'='172.21.0.2:4007',
  9. 'dfs.namenode.rpc-address.your-nameservice.nn2'='172.21.0.3:4007',
  10. 'dfs.client.failover.proxy.provider.your-nameservice'='org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider'
  11. );
  12. # 2. 创建 Catalog 并使用 Resource,这里的 Key Value 信息会覆盖 Resource 中的信息。
  13. CREATE CATALOG hive WITH RESOURCE hms_resource PROPERTIES(
  14. 'key' = 'value'
  15. );

我们也可以直接将 hive-site.xml 放到 FE 和 BE 的 conf 目录下,系统也会自动读取 hive-site.xml 中的信息。信息覆盖的规则如下:

  • Resource 中的信息覆盖 hive-site.xml 中的信息。
  • CREATE CATALOG PROPERTIES 中的信息覆盖 Resource 中的信息。

Hive 版本

Doris 可以正确访问不同 Hive 版本中的 Hive Metastore。在默认情况下,Doris 会以 Hive 2.3 版本的兼容接口访问 Hive Metastore。你也可以在创建 Catalog 时指定 hive 的版本。如访问 Hive 1.1.0 版本:

  1. CREATE CATALOG hive PROPERTIES (
  2. 'type'='hms',
  3. 'hive.metastore.uris' = 'thrift://172.21.0.1:7004',
  4. 'hive.version' = '1.1.0'
  5. );

列类型映射

适用于 Hive/Iceberge/Hudi

HMS TypeDoris TypeComment
booleanboolean
tinyinttinyint
smallintsmallint
intint
bigintbigint
datedate
timestampdatetime
floatfloat
doubledouble
charchar
varcharvarchar
decimaldecimal
array<type>array<type>支持array嵌套,如 array<array<int>>
otherunsupported