Iceberg catalog
此示例使用了在 StarRocks Basics 快速入门中介绍的本地气候数据 (LCD) 数据集。您可以导入数据并亲自尝试该示例。
Iceberg catalog 是一种外部 catalog,从 StarRocks v2.4 开始支持。使用 Iceberg catalog,您可以:
- 直接查询存储在 Iceberg 中的数据,无需手动创建表。
- 使用 INSERT INTO 或异步物化视图(从 v2.5 开始支持)来处理存储在 Iceberg 中的数据,并将数据导入到 StarRocks 中。
- 在 StarRocks 上执行操作以创建或删除 Iceberg 数据库和表,或使用 INSERT INTO 将 StarRocks 表中的数据下沉到 Parquet 格式的 Iceberg 表中(此功能从 v3.1 开始支持)。
为了确保在 Iceberg 集群上的 SQL 工作负载成功,您的 StarRocks 集群必须能够访问 Iceberg 集群的存储系统和元存储。StarRocks 支持以下存储系统和元存储:
-
分布式文件系统(HDFS)或对象存储,如 AWS S3、Microsoft Azure Storage、Google GCS 或其他 S3 兼容的存储系统(例如 MinIO)
-
元存储如 Hive metastore、AWS Glue 或 Tabular
- 如果选择 AWS S3 作为存储,可以使用 HMS 或 AWS Glue 作为元存储。如果选择其他存储系统,则只能使用 HMS 作为元存储。
- 如果选择 Tabular 作为元存储,则需要使用 Iceberg REST catalog。
使用注意事项
使用 StarRocks 查询 Iceberg 数据时,请注意以下几点:
| 文件格式 | 压缩格式 | Iceberg 表版本 |
|---|---|---|
| Parquet | SNAPPY, LZ4, ZSTD, GZIP, 和 NO_COMPRESSION |
|
| ORC | ZLIB, SNAPPY, LZO, LZ4, ZSTD, 和 NO_COMPRESSION |
|
集成准备
在创建 Iceberg catalog 之前,请确保您的 StarRocks 集群可以与 Iceberg 集群的存储系统和元存储集成。
存储
选择与您的存储类型匹配的选项卡:
- AWS S3
- HDFS
如果您的 Iceberg 集群使用 AWS S3 作为存储或 AWS Glue 作为元存储,请选择合适的身份验证方法并进行必要的准备,以确保您的 StarRocks 集群可以访问相关的 AWS 云资源。
推荐以下身份验证方法:
- 实例配置文件
- 假设角色
- IAM 用户
在上述三种身份验证方法中,实例配置文件是最广泛使用的。
有关更多信息,请参见 AWS IAM 中的身份验证准备。
如果选择 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 集群只能设置一个用户名。 -
当您查询 Iceberg 数据时,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 集群启用了文件系统视图(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 文件的保存路径。您可以根据需要修改路径。
创建 Iceberg catalog
语法
CREATE EXTERNAL CATALOG <catalog_name>
[COMMENT <comment>]
PROPERTIES
(
"type" = "iceberg",
[SecurityParams],
MetastoreParams,
StorageCredentialParams,
MetadataRelatedParams
)
参数
catalog_name
Iceberg catalog 的名称。命名约定如下:
- 名称可以包含字母、数字(0-9)和下划线(_)。必须以字母开头。
- 名称区分大小写,长度不能超过 1023 个字符。
comment
Iceberg catalog 的描述。此参数是可选的。
type
数据源的类型。将值设置为 iceberg。
SecurityParams
关于 StarRocks 如何管理 Catalog 数据访问的参数。
有关管理 Iceberg REST Catalog 数据访问的详细说明,请参阅Iceberg REST Catalog 的安全设置。
catalog.access.control
数据访问控制策略。有效值:
native(默认):使用 StarRocks 内置的数据访问控制系统。allowall:所有数据访问检查均委托给 Catalog 本身处理。ranger:数据访问检查委托给 Apache Ranger 处理。
MetastoreParams
关于 StarRocks 如何与数据源的元存储集成的一组参数。选择与您的元存储类型匹配的选项卡:
- Hive metastore
- AWS Glue
- REST
- JDBC
Hive metastore
如果选择 Hive metastore 作为数据源的元存储,请按以下方式配置 MetastoreParams:
"iceberg.catalog.type" = "hive",
"hive.metastore.uris" = "<hive_metastore_uri>"
在查询 Iceberg 数据之前,必须将 Hive metastore 节点的主机名和 IP 地址映射添加到 /etc/hosts 路径。否则,StarRocks 在启动查询时可能无法访问 Hive metastore。
下表描述了您需要在 MetastoreParams 中配置的参数。
iceberg.catalog.type
必需:是
描述:您用于 Iceberg 集群的元存储类型。将值设置为 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:"iceberg.catalog.type" = "glue",
"aws.glue.use_instance_profile" = "true",
"aws.glue.region" = "<aws_glue_region>" -
要选择基于假设角色的身份验证方法,请按以下方式配置
MetastoreParams:"iceberg.catalog.type" = "glue",
"aws.glue.use_instance_profile" = "true",
"aws.glue.iam_role_arn" = "<iam_role_arn>",
"aws.glue.region" = "<aws_glue_region>" -
要选择基于 IAM 用户的身份验证方法,请按以下方式配置
MetastoreParams:"iceberg.catalog.type" = "glue",
"aws.glue.use_instance_profile" = "false",
"aws.glue.access_key" = "<iam_user_access_key>",
"aws.glue.secret_key" = "<iam_user_secret_key>",
"aws.glue.region" = "<aws_s3_region>"
AWS Glue 的 MetastoreParams:
iceberg.catalog.type
必需:是
描述:您用于 Iceberg 集群的元存储类型。将值设置为 glue。
aws.glue.use_instance_profile
必需:是
描述:指定是否启用基于实例配置文件的身份验证方法和基于假设角色的身份验证方法。有效值:true 和 false。默认值:false。