Hudi catalog
Hudi Catalog 是一种 External Catalog。通过 Hudi Catalog,您不需要执行数据导入就可以直接查询 Apache Hudi 里的数据。
此外,您还可以基于 Hudi Catalog ,结合 INSERT INTO 能力来实现数据转换和导入。StarRocks 从 2.4 版本开始支持 Hudi Catalog。
为保证正常访问 Hudi 内的数据,StarRocks 集群必须能够访问 Hudi 集群的存储系统和元数据服务。目前 StarRocks 支持以下存储系统和元数据服务:
-
分布式文件系统 (HDFS) 或对象存储。当前支持的对象存储包括:AWS S3、Microsoft Azure Storage、Google GCS、其他兼容 S3 协议的对象存储(如阿里云 OSS、MinIO)。
-
元数据服务。当前支持的元数据服务包括:Hive Metastore(以下简称 HMS)、AWS Glue。
说明
如果选择 AWS S3 作为存储系统,您可以选择 HMS 或 AWS Glue 作为元数据服务。如果选择其他存储系统,则只能选择 HMS 作为元数据服务。
使用说明
- StarRocks 查询 Hudi 数据时,支持 Parquet 文件格式。Parquet 文件支持 SNAPPY、LZ4、ZSTD、GZIP 和 NO_COMPRESSION 压缩格式。
- StarRocks 完整支持了 Hudi 的 Copy On Write(COW)表和 Merge On Read(MOR)表。
准备工作
在创建 Hudi Catalog 之前,请确保 StarRocks 集群能够正常访问 Hudi 的文件存储及元数据服务。
AWS IAM
如果 Hudi 使用 AWS S3 作为文件存储或使用 AWS Glue 作为元数据服务,您需要选择一种合适的认证鉴权方案,确保 StarRocks 集群可以访问相关的 AWS 云资源。
您可以选择如下认证鉴权方案:
- Instance Profile(推荐)
- Assumed Role
- IAM User
有关 StarRocks 访问 AWS 认证鉴权的详细内容,参见配置 AWS 认证方式 - 准备工作。
HDFS
如果使用 HDFS 作为文件存储,则需要在 StarRocks 集群中做如下配置:
- (可选)设置用于访问 HDFS 集群和 HMS 的用户名。 您可以在每个 FE 的 fe/conf/hadoop_env.sh 文件、以及每个 BE 的 be/conf/hadoop_env.sh 文件(或每个 CN 的 cn/conf/hadoop_env.sh 文件)最开头增加
export HADOOP_USER_NAME="<user_name>"
来设置该用户名。配置完成后,需重启各个 FE 和 BE(或 CN)使配置生效。如果不设置该用户名,则默认使用 FE 和 BE(或 CN)进程的用户名进行访问。每个 StarRocks 集群仅支持配置一个用户名。 - 查询 Hudi 数据时,StarRocks 集群的 FE 和 BE(或 CN)会通过 HDFS 客户端访问 HDFS 集群。一般情况下,StarRocks 会按照默认配置来启动 HDFS 客户端,无需手动配置。但在以下场景中,需要进行手动配置:
- 如果 HDFS 集群开启了高可用(High Availability,简称为“HA”)模式,则需要将 HDFS 集群中的 hdfs-site.xml 文件放到每个 FE 的 $FE_HOME/conf 路径下、以及每个 BE 的 $BE_HOME/conf 路径(或每个 CN 的 $CN_HOME/conf 路径)下。
- 如果 HDFS 集群配置了 ViewFs,则需要将 HDFS 集群中的 core-site.xml 文件放到每个 FE 的 $FE_HOME/conf 路径下、以及每个 BE 的 $BE_HOME/conf 路径(或每个 CN 的 $CN_HOME/conf 路径)下。
注意
如果查询时因为域名无法识别 (Unknown Host) 而发生访问失败,您需要将 HDFS 集群中各节点的主机名及 IP 地址之间的映射关系配置到 /etc/hosts 路径中。
Kerberos 认证
如果 HDFS 集群或 HMS 开启了 Kerberos 认证,则需要在 StarRocks 集群中做如下配置:
- 在每个 FE 和 每个 BE(或 CN)上执行
kinit -kt keytab_path principal
命令,从 Key Distribution Center (KDC) 获取到 Ticket Granting Ticket (TGT)。执行命令的用户必须拥有访问 HMS 和 HDFS 的权限。注意,使用该命令访问 KDC 具有时效性,因此需要使用 cron 定期执行该命令。 - 在每个 FE 的 $FE_HOME/conf/fe.conf 文件和每个 BE 的 $BE_HOME/conf/be.conf 文件(或每个 CN 的 $CN_HOME/conf/cn.conf 文件)中添加
JAVA_OPTS="-Djava.security.krb5.conf=/etc/krb5.conf"
。其中,/etc/krb5.conf
是 krb5.conf 文件的路径,可以根据文件的实际路径进行修改。
创建 Hudi Catalog
语法
CREATE EXTERNAL CATALOG <catalog_name>
[COMMENT <comment>]
PROPERTIES
(
"type" = "hudi",
MetastoreParams,
StorageCredentialParams,
MetadataUpdateParams
)
参数说明
catalog_name
Hudi Catalog 的名称。命名要求如下:
- 必须由字母 (a-z 或 A-Z)、数字 (0-9) 或下划线 (_) 组成,且只能以字母开头。
- 总长度不能超过 1023 个字符。
- Catalog 名称大小写敏感。
comment
Hudi Catalog 的描述。此参数为可选。
type
数据源的类型。设置为 hudi
。
MetastoreParams
StarRocks 访问 Hudi 集群元数据服务的相关参数配置。
HMS
如果选择 HMS 作为 Hudi 集群的元数据服务,请按如下配置 MetastoreParams
:
"hive.metastore.type" = "hive",
"hive.metastore.uris" = "<hive_metastore_uri>"
说明
在查询 Hudi 数据之前,必须将所有 HMS 节点的主机名及 IP 地址之间的映射关系添加到 /etc/hosts 路径。否则,发起查询时,StarRocks 可能无法访问 HMS。
MetastoreParams
包含如下参数。
参数 | 是否必须 | 说明 |
---|---|---|
hive.metastore.type | 是 | Hudi 集群所使用的元数据服务的类型。设置为 hive 。 |
hive.metastore.uris | 是 | HMS 的 URI。格式:thrift://<HMS IP 地址>:<HMS 端口号> 。 |