跳到主要内容

Hive Metastore

本文档用于介绍通过 CREATE CATALOG 语句连接并访问 Hive MetaStore 服务时支持的所有参数。

支持的 Catalog 类型​

Catalog 类型类型标识 (type)描述
Hivehms对接 Hive Metastore 的 Catalog
Icebergiceberg对接 Iceberg 表格式
Paimonpaimon对接 Apache Paimon 表格式

通用参数总览​

以下参数为不同 Catalog 类型的通用参数。

参数名称曾用名是否必须默认值简要描述
hive.metastore.uris是无Hive Metastore 的 URI 地址,支持多个逗号分隔,示例:'hive.metastore.uris' = 'thrift://127.0.0.1:9083','hive.metastore.uris' = 'thrift://127.0.0.1:9083,thrift://127.0.0.1:9084'
hive.metastore.authentication.typehadoop.security.authentication否simpleMetastore 认证方式:支持 simple(默认)或 kerberos,在 3.0 及之前版本中,认证方式由 hadoop.security.authentication 属性决定。3.1 版本开始,可以单独指定 Hive Metastore 的认证方式,示例:'hive.metastore.authentication.type' = 'kerberos'
hive.metastore.service.principalhive.metastore.kerberos.principal否空Hive 服务端 principal,支持 _HOST 占位符,示例:'hive.metastore.service.principal' = 'hive/_HOST@EXAMPLE.COM'
hive.metastore.client.principalhadoop.kerberos.principal否空Doris 连接到 Hive MetaStore 服务时使用的 Kerberos 主体。
hive.metastore.client.keytabhadoop.kerberos.keytab否空Kerberos keytab 文件路径
hive.metastore.usernamehadoop.username否hadoopHive Metastore 用户名,非 Kerberos 模式下使用
hive.conf.resources否空hive-site.xml 配置文件路径,使用相对路径
hive.metastore.client.socket.timeout否默认值为 FE 配置参数中的 hive_metastore_client_timeout_second,默认为 10 秒。该参数自 4.0.3 版本支持。通过 Hive Metastore Client 连接访问元信息的超时时间。如果元信息较大(比如分区数量多时),可调大这个值。

注:

3.1.0 版本之前,请使用曾用名。

必填参数​

  • hive.metastore.uris:必须指定 Hive Metastore 的 URI 地址

可选参数​

  • hive.metastore.authentication.type:认证方式,默认为 simple,可选 kerberos

  • hive.metastore.service.principal:Hive MetaStore 服务的 Kerberos 主体,当使用 Kerberos 认证时必须指定。

  • hive.metastore.client.principal:Doris 连接到 Hive MetaStore 服务时使用的 Kerberos 主体,当使用 Kerberos 认证时必须指定。

  • hive.metastore.client.keytab:Kerberos keytab 文件路径,当使用 Kerberos 认证时必须指定。

  • hive.metastore.username:连接 Hive MetaStore 服务的用户名,非 Kerberos 模式下使用,默认为 hadoop。

  • hive.conf.resources:hive-site.xml 配置文件路径,当需要通过配置文件的方式读取链接 Hive Metastore 服务的配置时使用。

认证方式​

Simple 认证​

  • simple:非 Kerberos 模式,直接连接 Hive Metastore 服务。

Kerberos 认证​

使用 Kerberos 认证连接 Hive Metastore 服务,需要配置以下参数:

  • hive.metastore.authentication.type:设置为 kerberos

  • hive.metastore.service.principal:Hive MetaStore 服务的 Kerberos 主体

  • hive.metastore.client.principal:Doris 连接到 Hive MetaStore 服务时使用的 Kerberos 主体

  • hive.metastore.client.keytab:Kerberos keytab 文件路径

'hive.metastore.authentication.type' = 'kerberos',
'hive.metastore.service.principal' = 'hive/_HOST@EXAMPLE.COM',
'hive.metastore.client.principal' = 'hive/doris.cluster@EXAMPLE.COM',
'hive.metastore.client.keytab' = '/etc/security/keytabs/hive.keytab'

使用开启 Kerberos 认证的 Hive MetaStore 服务时需要确保所有 FE 节点上都存在相同的 keytab 文件,并且运行 Doris 进程的用户具有该 keytab 文件的读权限。以及 krb5 配置文件配置正确。

Kerberos 详细配置参考 Kerberos 认证。

配置文件参数​

hive.conf.resources​

如需要通过配置文件的方式读取链接 Hive Metastore 服务的配置,可以配置 hive.conf.resources 参数来设置 conf 文件路径。

注意:hive.conf.resources 参数仅支持相对路径,请勿使用绝对路径。默认路径为 ${DORIS_HOME}/plugins/hadoop_conf/ 目录下。可通过修改 fe.conf 中的 hadoop_config_dir 来指定其他目录。

示例:'hive.conf.resources' = 'hms-1/hive-site.xml'

Catalog 类型数据​

以下参数是除通用参数外,各个 Catalog 特有的参数说明。

Hive Catalog​

参数名称曾用名是否必须默认值简要描述
type是无Catalog 类型,Hive Catalog 固定为 iceberg
hive.metastore.type否'hms'Metadata Catalog 类型,Hive Metastore 固定为 hms,使用 HiveMetaStore 则必须为 hms

示例​

  1. 创建一个使用无认证的 Hive Metastore 作为元数据服务的 Hive Catalog,存储使用 S3 存储服务。

    CREATE CATALOG hive_hms_s3_test_catalog PROPERTIES (
    'type' = 'hms',
    'hive.metastore.uris' = 'thrift://127.0.0.1:9383',
    's3.access_key' = 'S3_ACCESS_KEY',
    's3.secret_key' = 'S3_SECRET_KEY',
    's3.region' = 's3.ap-east-1.amazonaws.com'
    );
  2. 创建一个使用开启了 Kerberos 认证的 Hive Metastore 作为元数据服务的 Hive Catalog,存储使用 S3 存储服务。

     CREATE CATALOG hive_hms_on_oss_kerberos_new_catalog PROPERTIES (
    'type' = 'hms',
    'hive.metastore.uris' = 'thrift://127.0.0.1:9583',
    'hive.metastore.client.principal'='hive/presto-master.docker.cluster@LABS.TERADATA.COM',
    'hive.metastore.client.keytab' = '/mnt/keytabs/hive-presto-master.keytab',
    'hive.metastore.service.principal' = 'hive/hadoop-master@LABS.TERADATA.COM',
    'hive.metastore.authentication.type'='kerberos',
    'hadoop.security.auth_to_local' = 'RULE:[2:\$1@\$0](.*@LABS.TERADATA.COM)s/@.*//
    RULE:[2:\$1@\$0](.*@OTHERLABS.TERADATA.COM)s/@.*//
    RULE:[2:\$1@\$0](.*@OTHERREALM.COM)s/@.*//
    DEFAULT',
    'oss.access_key' = 'OSS_ACCESS_KEY',
    'oss.secret_key' = 'OSS_SECRET_KEY',
    'oss.endpoint' = 'oss-cn-beijing.aliyuncs.com'
    );

Iceberg Catalog​

参数名称曾用名是否必须默认值简要描述
type是无Catalog 类型,Iceberg 固定为 iceberg
iceberg.catalog.type否无Metadata Catalog 类型,Hive Metastore 固定为 hms,使用 HiveMetaStore 则必须为 hms
warehouse否无Iceberg 仓库路径

示例​

  1. 创建一个使用 Hive Metastore 作为元数据服务的 Iceberg Catalog,存储使用 S3 存储服务。

     CREATE CATALOG iceberg_hms_s3_test_catalog PROPERTIES (
    'type' = 'iceberg',
    'iceberg.catalog.type' = 'hms',
    'hive.metastore.uris' = 'thrift://127.0.0.1:9383',
    'warehouse' = 's3://doris/iceberg_warehouse/',
    's3.access_key' = 'S3_ACCESS_KEY',
    's3.secret_key' = 'S3_SECRET_KEY',
    's3.region' = 's3.ap-east-1.amazonaws.com'
    );
  • 创建一个使用开启了 Kerberos 认证的 Hive Metastore 作为元数据服务的 Iceberg Catalog,并且处于多 kerberos 环境下。存储使用 S3 存储服务。

    CREATE CATALOG IF NOT EXISTS iceberg_hms_on_oss_kerberos_new_catalog PROPERTIES (
    'type' = 'iceberg',
    'iceberg.catalog.type' = 'hms',
    'hive.metastore.uris' = 'thrift://127.0.0.1:9583',
    'warehouse' = 'oss://doris/iceberg_warehouse/',
    'hive.metastore.client.principal'='hive/presto-master.docker.cluster@LABS.TERADATA.COM',
    'hive.metastore.client.keytab' = '/mnt/keytabs/hive-presto-master.keytab',
    'hive.metastore.service.principal' = 'hive/hadoop-master@LABS.TERADATA.COM',
    'hive.metastore.authentication.type'='kerberos',
    'hadoop.security.auth_to_local' = 'RULE:[2:\$1@\$0](.*@LABS.TERADATA.COM)s/@.*//
    RULE:[2:\$1@\$0](.*@OTHERLABS.TERADATA.COM)s/@.*//
    RULE:[2:\$1@\$0](.*@OTHERREALM.COM)s/@.*//
    DEFAULT',
    'oss.access_key' = 'OSS_ACCESS_KEY',
    'oss.secret_key' = 'OSS_SECRET_KEY',
    'oss.endpoint' = 'oss-cn-beijing.aliyuncs.com'
    );

Paimon Catalog​

参数名称曾用名是否必须默认值简要描述
type是无Catalog 类型,Iceberg 固定为 iceberg
paimon.catalog.type否filesystem使用 HiveMetaStore 则必须为 hms,默认值为 filesystem, 即使用文件系统存储元数据
warehouse是无Paimon 仓库路径

示例​

  1. 创建一个使用 Hive Metastore 作为元数据服务的 Paimon Catalog,存储使用 S3 存储服务。

     CREATE CATALOG IF NOT EXISTS paimon_hms_s3_test_catalog PROPERTIES (
    'type' = 'paimon',
    'paimon.catalog.type' = 'hms',
    'hive.metastore.uris' = 'thrift://127.0.0.1:9383',
    'warehouse' = 's3://doris/paimon_warehouse/',
    's3.access_key' = 'S3_ACCESS_KEY',
    's3.secret_key' = 'S3_SECRET_KEY',
    's3.region' = 's3.ap-east-1.amazonaws.com'
    );
  • 创建一个使用开启了 Kerberos 认证的 Hive Metastore 作为元数据服务的 Paimon Catalog,并且处于多 kerberos 环境下。存储使用 S3 存储服务。

     CREATE CATALOG IF NOT EXISTS paimon_hms_on_oss_kerberos_new_catalog PROPERTIES (
    'type' = 'paimon',
    'paimon.catalog.type' = 'hms',
    'hive.metastore.uris' = 'thrift://127.0.0.1:9583',
    'warehouse' = 's3://doris/iceberg_warehouse/',
    'hive.metastore.client.principal'='hive/presto-master.docker.cluster@LABS.TERADATA.COM',
    'hive.metastore.client.keytab' = '/mnt/keytabs/hive-presto-master.keytab',
    'hive.metastore.service.principal' = 'hive/hadoop-master@LABS.TERADATA.COM',
    'hive.metastore.authentication.type'='kerberos',
    'hadoop.security.auth_to_local' = 'RULE:[2:\$1@\$0](.*@LABS.TERADATA.COM)s/@.*//
    RULE:[2:\$1@\$0](.*@OTHERLABS.TERADATA.COM)s/@.*//
    RULE:[2:\$1@\$0](.*@OTHERREALM.COM)s/@.*//
    DEFAULT',
    'oss.access_key' = 'OSS_ACCESS_KEY',
    'oss.secret_key' = 'OSS_SECRET_KEY',
    'oss.endpoint' = 'oss-cn-beijing.aliyuncs.com'
    );

HMS 访问端口要求​

说明:Doris 访问 HMS 最少需保证以下端口连通。

服务端口用途默认端口协议
Hive MetastoreThrift(元数据访问)9083TCP

注意:

  • 端口可能被 hive-site.xml自定义,请以实际配置为准。
  • 当启用 Kerberos 认证时,需要保证 Doris 到 Kerberos KDC 的网络连通。KDC 默认监听 TCP 88 端口,如有自定义请以实际配置为准。

常见问题 FAQ​

  • Q1: hive-site.xml 是必须的吗?

    不是,仅当需要从中读取链接配置时使用。

  • Q2: keytab 文件是否必须每个节点都存在?

    是的,所有 FE 节点必须可访问指定路径。

  • Q3: 如使用回写功能,即在 Doris 中创建 Hive/Iceberg 库/表,需要注意什么?

    由于创建表涉及到存储端的元数据操作,即需要访问存储系统,因此 Hive MetaStore 服务 Server 端需要配置对应存储参数,如 S3、OSS 等存储服务的访问参数。如使用对象存储作为底层存储系统,还需要确保写入的 bucket 与配置的 Region 一致。