跳到主要内容
You're viewing the preview version of this page. For the full experience, please return to the .

Trino Connector 集成开发指南

本文面向需要为 Apache Doris 接入 Trino Connector 插件的开发者,介绍如何编译 Connector 插件、配置 FE / BE,以及创建并使用 trino-connector 类型的 Catalog。下文以 Kafka Connector 为主线,并给出 Hive / MySQL / BigQuery 等常用插件的配置范例。

内容导览


背景

从 3.0 版本开始,Doris 支持对接 Trino Connector 插件。通过丰富的 Trino Connector 插件以及 Doris 的 trino-connector Catalog 功能,可以让 Doris 支持更多的数据源。

场景推荐方案
Hive、Iceberg、Hudi、Paimon、JDBC 等主流数据源优先使用 Doris 内置 Catalog,性能、稳定性与兼容性更好
Doris 暂未内置的其他数据源使用 Trino Connector 兼容框架,快速接入更多数据源

注:Trino 是一款由 Trino 软件基金会 提供的 Apache License 2.0 协议开源软件,详情可访问 Trino 官网


Step 1 - 编译 Connector 插件

Trino 没有提供官方编译好的 Connector 插件,需要自行编译所需 Connector 插件。

注意:由于 Doris 当前使用 435 版本的 trino-main 包,所以最好编译 435 版本的 Connector 插件。非 435 版本的 Connector 插件可能存在兼容性问题。如遇问题,欢迎向 Apache Doris 社区反馈。

以 Kafka 插件为例:

# 1. 拉取 Trino 源码
git clone https://github.com/trinodb/trino.git

# 2. 切换到 435 版本
git checkout 435

# 3. 进入 Kafka 插件源码目录
cd trino/plugin/trino-kafka

# 4. 编译 Kafka 插件
mvn clean install -DskipTests

编译完成后,在 trino/plugin/trino-kafka/ 目录下会生成 target/trino-kafka-435 目录。

注意:每一个 Connector 插件都是一个子目录,而不是一个 jar 包。


Step 2 - 配置 FE / BE

准备好 Kafka Connector 插件后,需要在 Doris 的 fe.confbe.conf 中配置插件目录,使 Doris 能够找到该插件。

假设将上一步准备好的 trino-kafka-435 目录存放在 /path/to/connectors 下,则配置如下:

文件配置项默认值
fe.conftrino_connector_plugin_dir=/path/to/connectors${Doris_HOME}/fe/connectors
be.conftrino_connector_plugin_dir=/path/to/connectors${Doris_HOME}/be/connectors

懒加载机制:Doris 采用懒加载方式加载 Trino Connector 插件。第一次使用 trino-connector Catalog 功能时无需重启 FE / BE 节点,Doris 会自动加载插件。但插件只会加载一次,插件目录内容发生变化后需要重启 FE / BE 节点才能让变更生效。


Step 3 - 创建并使用 Catalog

3.1 创建 Trino-Connector Catalog

create catalog kafka_tpch properties (
"type"="trino-connector",
-- 下面这四个属性来源于 trino,与 trino 的 etc/catalog/kafka.properties 中的属性一致。但需要统一增加 "trino." 前缀
"trino.connector.name"="kafka",
"trino.kafka.table-names"="tpch.customer,tpch.orders,tpch.lineitem,tpch.part,tpch.partsupp,tpch.supplier,tpch.nation,tpch.region",
"trino.kafka.nodes"="localhost:9092",
"trino.kafka.table-description-dir" = "/mnt/datadisk1/fangtiewei"
);

属性说明:

属性说明
typeCatalog 类型,必须设置为 trino-connector
trino.connector.nameTrino Connector 的名称,例如 kafka
trino.kafka.table-names这些属性来源于 Trino,统一加 trino. 前缀,参考 Kafka connector

不同的 Connector 插件需要设置不同的属性,可以参考 Trino 官方文档:Connectors

3.2 使用 Catalog

创建好 Trino-Connector Catalog 后,在使用上与其他 Catalog 没有任何区别。通过 switch kafka_tpch 语句切换到该 Catalog,即可查询对应数据源的数据:

switch kafka_tpch;
show databases;
select * from tpch.customer limit 10;

常用 Connector 配置示例

Hive

create catalog emr_hive properties (
"type"="trino-connector",
"trino.connector.name"="hive",
"trino.hive.metastore.uri"="thrift://ip:port",
"trino.hive.config.resources"="/path/to/core-site.xml,/path/to/hdfs-site.xml"
);

使用 Hive 插件时需要注意:

  • 需要在 JVM 参数里加上 Hadoop 用户:-DHADOOP_USER_NAME=user,可以配置在 fe.conf / be.confJAVA_OPTS_FOR_JDK_17 参数末尾,如 JAVA_OPTS_FOR_JDK_17="...-DHADOOP_USER_NAME=user"

MySQL

create catalog trino_mysql properties (
"type"="trino-connector",
"trino.connector.name"="mysql",
"trino.connection-url" = "jdbc:mysql://ip:port",
"trino.connection-user" = "user",
"trino.connection-password" = "password"
);

使用 MySQL 插件时需要注意:

  • 遇到报错 Unknown or incorrect time zone: 'Asia/Shanghai',需要在 JVM 启动参数处加上 -Duser.timezone=Etc/GMT-8,可以配置在 fe.conf / be.confJAVA_OPTS_FOR_JDK_17 参数末尾。

Kafka

create catalog kafka properties (
"type"="trino-connector",
"trino.connector.name"="kafka",
"trino.kafka.nodes"="localhost:9092",
"trino.kafka.table-description-supplier"="CONFLUENT",
"trino.kafka.confluent-schema-registry-url"="http://localhost:8081",
"trino.kafka.hide-internal-columns" = "false"
);

BigQuery

create catalog bigquery_catalog properties (
"type"="trino-connector",
"trino.connector.name"="bigquery",
"trino.bigquery.project-id"="steam-circlet-388406",
"trino.bigquery.credentials-file"="/path/to/application_default_credentials.json"
);

FAQ 与常见错误

Q: 修改了 /path/to/connectors 下的插件,为什么 Doris 没生效?

A: Doris 采用懒加载,但插件只加载一次。修改插件后需要重启 FE / BE 节点。

Q: 启动报错插件版本不兼容?

A: 确认编译时切换到了 Trino 435 分支,Doris 当前使用 trino-main 的 435 版本,其他版本可能存在兼容性问题。

Q: 使用 Hive 插件查询报权限错误或访问 HDFS 失败?

A: 检查 JAVA_OPTS_FOR_JDK_17 是否设置 -DHADOOP_USER_NAME=user,以及 trino.hive.config.resources 指向的 core-site.xml / hdfs-site.xml 是否可读。

Q: MySQL 插件报 Unknown or incorrect time zone: 'Asia/Shanghai'

A: 在 JAVA_OPTS_FOR_JDK_17 末尾加上 -Duser.timezone=Etc/GMT-8

Q: Hive、Iceberg、Hudi 等数据源是否应该用 Trino Connector?

A: 不推荐。Doris 内置 Catalog 在这些数据源上性能、稳定性和兼容性更好,Trino Connector 框架定位是补足 Doris 尚未内置的数据源。