跳到主要内容
版本: 最新版本-3.5

Kudu Catalog

StarRocks 从 v3.3 版本开始支持 Kudu catalog。

Kudu catalog 是一种外部 Catalog,可以让您直接查询 Apache Kudu 中的数据,而无需进行数据导入。

此外,您还可以通过 Kudu catalog,使用 INSERT INTO 将数据直接转换和加载到 Kudu 中。

为确保在 Kudu 集群上成功运行 SQL 工作负载,您的 StarRocks 集群需要与以下重要组件集成

  • Metastore,例如您的 Kudu 文件系统或 Hive Metastore

使用说明

您只能使用 Kudu catalog 查询数据。您不能使用 Kudu catalog 删除、删除或插入数据到您的 Kudu 集群中。

集成准备

在创建 Kudu catalog 之前,请确保您的 StarRocks 集群可以与 Kudu 集群的存储系统和 Metastore 集成。

注意

如果在发送查询时返回指示未知主机的错误,则必须将 KUDU 集群节点的host名称和 IP 地址之间的映射添加到 /etc/hosts 路径中。

Kerberos 身份验证

如果为您的 KUDU 集群或 Hive Metastore 启用了 Kerberos 身份验证,请按如下方式配置您的 StarRocks 集群

  • 在每个 FE 和每个 BE 上运行 kinit -kt keytab_path principal 命令,以从密钥分发中心 (KDC) 获取票证授权票证 (TGT)。要运行此命令,您必须具有访问 KUDU 集群和 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 文件中。在此示例中,/etc/krb5.confkrb5.conf 文件的保存路径。您可以根据需要修改路径。

创建 Kudu catalog

语法

CREATE EXTERNAL CATALOG <catalog_name>
[COMMENT <comment>]
PROPERTIES
(
"type" = "kudu",
CatalogParams
)

参数

catalog_name

Kudu catalog 的名称。命名约定如下

  • 该名称可以包含字母、数字 (0-9) 和下划线 (_)。它必须以字母开头。
  • 该名称区分大小写,长度不能超过 1023 个字符。

comment

Kudu catalog 的描述。此参数是可选的。

type

数据源的类型。将该值设置为 kudu

CatalogParams

一组关于 StarRocks 如何访问 Kudu 集群元数据的参数。

下表描述了您需要在 CatalogParams 中配置的参数。

参数必需描述
kudu.catalog.type您用于 Kudu 集群的 Metastore 类型。将此参数设置为 kuduhive
kudu.master指定 Kudu Master 地址,默认为 localhost:7051
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>"
kudu.schema-emulation.enabled用于启用或禁用 schema 模拟的选项。 默认情况下,它是关闭的 (false),这意味着所有表都属于 default schema
kudu.schema-emulation.prefix只有在 kudu.schema-emulation.enabled = true 时才应设置 schema 模拟的前缀。 使用的默认前缀是空字符串:

注意

如果您使用 Hive Metastore,您必须先将 Hive Metastore 节点的主机名和 IP 地址之间的映射添加到 /etc/hosts 路径,然后才能查询 Kudu 数据。 否则,当您启动查询时,StarRocks 可能无法访问您的 Hive Metastore。

示例

  • 以下示例创建了一个名为 kudu_catalog 的 Kudu catalog,其 Metastore 类型 kudu.catalog.type 设置为 kudu,以查询 Kudu 集群中的数据。

    CREATE EXTERNAL CATALOG kudu_catalog
    PROPERTIES
    (
    "type" = "kudu",
    "kudu.master" = "localhost:7051",
    "kudu.catalog.type" = "kudu",
    "kudu.schema-emulation.enabled" = "true",
    "kudu.schema-emulation.prefix" = "impala::"
    );
  • 以下示例创建了一个名为 kudu_catalog 的 Kudu catalog,其 Metastore 类型 kudu.catalog.type 设置为 hive,以查询 Kudu 集群中的数据。

    CREATE EXTERNAL CATALOG kudu_catalog
    PROPERTIES
    (
    "type" = "kudu",
    "kudu.master" = "localhost:7051",
    "kudu.catalog.type" = "hive",
    "hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
    "kudu.schema-emulation.enabled" = "true",
    "kudu.schema-emulation.prefix" = "impala::"
    );

查看 Kudu catalog

您可以使用 SHOW CATALOGS 查询当前 StarRocks 集群中的所有 Catalog

SHOW CATALOGS;

您还可以使用 SHOW CREATE CATALOG 查询外部 catalog 的创建语句。 以下示例查询名为 kudu_catalog 的 Kudu catalog 的创建语句

SHOW CREATE CATALOG kudu_catalog;

删除 Kudu catalog

您可以使用 DROP CATALOG 删除外部 Catalog。

以下示例删除了一个名为 kudu_catalog 的 Kudu catalog

DROP Catalog kudu_catalog;

查看 Kudu 表的 schema

您可以使用以下语法之一查看 Kudu 表的 schema

  • 查看 Schema

    DESC[RIBE] <catalog_name>.<database_name>.<table_name>;
  • 从 CREATE 语句中查看 Schema 和 Location

    SHOW CREATE TABLE <catalog_name>.<database_name>.<table_name>;

查询 Kudu 表

  1. 使用 SHOW DATABASES 查看 Kudu 集群中的数据库

    SHOW DATABASES FROM <catalog_name>;
  2. 使用 SET CATALOG 切换到当前会话中的目标 Catalog

    SET CATALOG <catalog_name>;

    然后,使用 USE 指定当前会话中的活动数据库

    USE <db_name>;

    或者,您可以使用 USE 直接指定目标 Catalog 中的活动数据库

    USE <catalog_name>.<db_name>;
  3. 使用 SELECT 查询指定数据库中的目标表

    SELECT count(*) FROM <table_name> LIMIT 10;

从 Kudu 加载数据

假设您有一个名为 olap_tbl 的 OLAP 表,您可以转换和加载数据,如下所示

INSERT INTO default_catalog.olap_db.olap_tbl SELECT * FROM kudu_table;