Unified catalog
统一 catalog 是一种外部 catalog,由 StarRocks 从 v3.2 开始提供,用于处理来自 Apache Hive™、Apache Iceberg、Apache Hudi、Delta Lake 和 Apache Kudu 数据源的表,作为统一的数据源而无需导入。通过统一 catalog,您可以:
- 直接查询存储在 Hive、Iceberg、Hudi、Delta Lake、Paimon 和 Kudu 中的数据,无需手动创建表。
- 使用 INSERT INTO 或异步物化视图(从 v2.5 开始支持)处理存储在 Hive、Iceberg、Hudi、Delta Lake、Paimon 和 Kudu 中的数据,并将数据导入 StarRocks。
- 在 StarRocks 上执行操作以创建或删除 Hive 和 Iceberg 数据库和表。
为了确保在统一数据源上成功执行 SQL 工作负载,您的 StarRocks 集群必须能够访问统一数据源的存储系统和元数据存储。StarRocks 支持以下存储系统和元数据存储:
-
分布式文件系统(HDFS)或对象存储,如 AWS S3、Microsoft Azure Storage、Google GCS 或其他兼容 S3 的存储系统(例如 MinIO)
-
元数据存储如 Hive metastore 或 AWS Glue
注意
如果选择 AWS S3 作为存储,可以使用 HMS 或 AWS Glue 作为元数据存储。如果选择其他存储系统,则只能使用 HMS 作为元数据存储。
限制
一个统一 catalog 仅支持与单一存储系统和单一元数据存储服务的集成。因此,请确保您希望与 StarRocks 集成为统一数据源的所有数据源使用相同的存储系统和元数据存储服务。
使用注意事项
-
请参阅 Hive catalog、Iceberg catalog、Hudi catalog、Delta Lake catalog、Paimon catalog 和 Kudu catalog 中的“使用注意事项”部分,以了解支持的文件格式和数据类型。
-
格式特定的操作仅支持特定的表格式。例如,CREATE TABLE 和 DROP TABLE 仅支持 Hive 和 Iceberg,REFRESH EXTERNAL TABLE 仅支持 Hive 和 Hudi。
当您使用 CREATE TABLE 语句在统一 catalog 中创建表时,使用
ENGINE参数指定表格式(Hive 或 Iceberg)。
集成准备
在创建统 一 catalog 之前,请确保您的 StarRocks 集群可以与统一数据源的存储系统和元数据存储集成。
AWS IAM
如果您使用 AWS S3 作为存储或 AWS Glue 作为元数据存储,请选择合适的身份验证方法并进行必要的准备,以确保您的 StarRocks 集群可以访问相关的 AWS 云资源。有关更多信息,请参阅 Authenticate to AWS resources - Preparations。
HDFS
如果选择 HDFS 作为存储,请按以下步骤配置您的 StarRocks 集群:
- (可选)设置用于访问 HDFS 集群和 Hive metastore 的用户名。默认情况下,StarRocks 使用 FE 和 BE 或 CN 进程的用户名访问 HDFS 集群和 Hive metastore。您还可以通过在每个 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 以使参数设置生效。每个 StarRocks 集群只能设置一个用户名。 - 当您查询数据时,StarRocks 集群的 FEs 和 BEs 或 CNs 使用 HDFS 客户端访问 HDFS 集群。在大多数情况下,您不需要为此目的配置 StarRocks 集群,StarRocks 使用默认配置启动 HDFS 客户端。您仅在以下情况下需要配置 StarRocks 集群:
- 启用了 HDFS 集群的高可用性(HA):将 HDFS 集群的 hdfs-site.xml 文件添加到每个 FE 的 $FE_HOME/conf 路径和每个 BE 的 $BE_HOME/conf 路径或每个 CN 的 $CN_HOME/conf 路径。
- 启用了 HDFS 集群的 View File System (ViewFs):将 HDFS 集群的 core-site.xml 文件添加到每个 FE 的 $FE_HOME/conf 路径和每个 BE 的 $BE_HOME/conf 路径或每个 CN 的 $CN_HOME/conf 路径。
注意
如果在发送查询时返回未知主机错误,您必须将 HDFS 集群节点的主机名和 IP 地址的映射添加到 /etc/hosts 路径。
Kerberos 认证
如果 HDFS 集群或 Hive metastore 启用了 Kerberos 认证,请按以下步骤配置您的 StarRocks 集群:
- 在每个 FE 和每个 BE 或 CN 上运行
kinit -kt keytab_path principal命令,从密钥分发中心 (KDC) 获取票证授予票证 (TGT)。要运行此命令,您必须具有访问 HDFS 集群和 Hive metastore 的权限。请注意,使用此命令访问 KDC 是时间敏感的。因此,您需要使用 cron 定期运行此命令。 - 将
JAVA_OPTS="-Djava.security.krb5.conf=/etc/krb5.conf"添加到每个 FE 的 $FE_HOME/conf/fe.conf 文件和每个 BE 的 $BE_HOME/conf/be.conf 文件或每个 CN 的 $CN_HOME/conf/cn.conf 文件中。在此示例中,/etc/krb5.conf是 krb5.conf 文件的保存路径。您可以根据需要修改路径。
创建统一 catalog
语法
CREATE EXTERNAL CATALOG <catalog_name>
[COMMENT <comment>]
PROPERTIES
(
"type" = "unified",
MetastoreParams,
StorageCredentialParams,
MetadataUpdateParams,
PaimonCatalogParams,
KuduCatalogParams
)
参数
catalog_name
统一 catalog 的名称。命名约定如下:
- 名称可以包含字母、数字(0-9)和下划线(_)。必须以字母开头。
- 名称区分大小写,长度不能超过 1023 个字符。
comment
统一 catalog 的描述。此参数是可选的。
type
数据源的类型。将值设置为 unified。
MetastoreParams
关于 StarRocks 如何与您的元数据存储集成的一组参数。
Hive metastore
如果选择 Hive metastore 作为统一数据源的元数据存储,请按以下方式配置 MetastoreParams:
"unified.metastore.type" = "hive",
"hive.metastore.uris" = "<hive_metastore_uri>"
注意
在查询数据之前,您必须将 Hive metastore 节点的主机名和 IP 地址的映射添加到 /etc/hosts 路径。否则,StarRocks 在启动查询时可能无法访问 Hive metastore。
下表描述了您需要在 MetastoreParams 中配置的参数。
| 参数 | 必需 | 描述 |
|---|---|---|
| unified.metastore.type | 是 | 您用于统一数据源的元数据存储类型。将值设置为 hive。 |
| hive.metastore.uris | 是 | Hive metastore 的 URI。格式:thrift://<metastore_IP_address>:<metastore_port>。如果启用了 Hive metastore 的高可用性(HA),您可以指定多个 metastore URI,并用逗号(,)分隔,例如 "thrift://<metastore_IP_address_1>:<metastore_port_1>,thrift://<metastore_IP_address_2>:<metastore_port_2>,thrift://<metastore_IP_address_3>:<metastore_port_3>"。 |
AWS Glue
如果选择 AWS Glue 作为数据源的元数据存储,仅在选择 AWS S3 作为存储时支持,请采取以下操作之一:
-
要选择基于实例配置文件的身份验证方法,请按以下方式配置
MetastoreParams