火山引擎 E-MapReduce(EMR)Trino 内置了 TPC-H、Hive、Iceberg 和 Hudi 连接器配置,如果您在安装 Trino 服务时已安装 Hive 服务,则 EMR 会自动生成对应的 Connector 配置文件。如果 Hive 服务是在 Trino 之后安装,则需要您在控制台侧手动重启 Trino 服务以触发生成 Connector 配置。
说明
EMR 只有在检测已安装 Hive 服务的前提下,才会自动生成 Hive、Iceberg 和 Hudi 的 Connector 配置文件。
内置 Connector 通常采用最小化配置,如果您需要对内置 Connector 配置进行修改,可以参考 Trino 官方文档 的 Connector 配置说明,并在 EMR 控制台“集群详情 > 服务列表 > Trino > 服务参数”中对具体 Connector 的配置进行调整。
如果内置 Connector 不能满足您的需求,EMR 也支持您在控制台侧自定义 Connector 配置。您可以在 EMR 控制台“集群详情 > 服务列表 > Trino > 服务参数”页面找到并编辑 custom-connector.properties
配置文件,通过“添加自定义参数”添加自定义 Connector 配置。
如上图所示演示了添加 MySQL Connector 的自定义配置,其中:
参数名称:目标数据源在 Trino 中的 Catalog 名称。
参数值:目标数据源的 Connector 配置,可以参考 Trino 官方文档。
Trino 支持资源组配置以限制资源的使用,尽量避免 SQL 任务因资源不足而失败,详细介绍可以参考 Trino 官方文档。
如果您希望对 Trino 资源组进行配置,可以在 EMR 控制台“集群详情 > 服务列表 > Trino > 服务参数”页面修改 resource-groups.json
配置文件的参数值(JSON 格式)。如下图所示:
Trino 内置 Web UI 为查看和诊断 Trino 及其 SQL 任务的运行状态提供了有力支撑,您可以在“集群详情 > 访问链接 > 服务链接”中找到 Trino UI 的访问入口。
与此同时,EMR 也提供了服务化的 Trino UI。相较于集群内置的 Trino UI,服务化的 Trino UI 在兼容开源使用方式的同时,将 Trino 作业运行数据抽离到集群之外进行存储和展示,从而支持集群在被释放之后仍然可以对作业进行诊断。
服务化 Trino UI 默认对集群的作业运行数据提供 30 天的存储和查看支持。同时,在数据存储层面做到了租户隔离,并在访问层面集成了 IAM 准入认证,以充分保障数据的安全性。如果您希望使用服务化的 Trino UI,可以在创建集群时,在“高级设置”中启用持久化 History Server,如下图所示:
对于启用了持久化 History Server 的集群,在集群创建完成后添加安装的 Trino 服务仍然会开启服务化的 Web UI。您可以在“集群详情 > 访问链接 > 持久化 History Server”页面找到服务化 Trino UI 的访问入口,如下图所示:
Trino 服务化 Web UI 现阶段只展示已完成或失败的作业,如果您希望查看运行中的作业运行状态,仍然可以访问集群内置的 Web UI。
高可用虚拟 IP(即 HAVIP)是一种可独立持有,并根据实际业务需要随时创建或删除的私网 IP 资源。HAVIP 通常与高可用组件(如 Keepalived)搭配使用,以搭建高可用主备服务。关于 HAVIP 更详细的介绍可以参考 官方文档。
对于启用了高可用(简称 HA)的集群,EMR 会在您集群的 master-1 和 master-2 节点上分别运行 Trino Coordinator,但默认只有 master-1 上的 Coordinator 提供服务。本小节将介绍如何基于“HAVIP+ Keepalived”手动配置,以实现让 master-1 和 master-2 节点上的 Coordinator 协作提供 HA 服务能力。
EMR HA 集群默认会在集群 master 节点上安装 Keepalived 组件,在具体开始配置之前您需要对 HAVIP 实例做如下配置:
已完成 HAVIP 实例的创建,且该实例需要与目标集群位于同一 VPC,如果需要跨 VPC 访问您集群的 Trino,建议为 HAVIP 实例绑定公网 IP。
已完成 HAVIP 实例与目标集群 master-1 和 master-2 ECS 实例的绑定。
已完成 HAVIP 访问域名申请和配置,现阶段这一步需要您联系火山 EMR 同学进行处理。
本小节使用到的 HAVIP 基本信息如下:
属性 | 值 |
---|---|
私网 IP | 192.168.3.3 |
访问域名 | virtual.emr-d2bc78xxx.cn-beijing.emr-volces.com |
修改集群 master-1 和 master-2 节点的 /etc/emr/keepalived/conf/keepalived.conf
配置,将其中的 virtual_ipaddress 配置项替换成 HAVIP 的私网 IP,例如:
# visual ip addr virtual_ipaddress { 192.168.3.3 }
执行 service keepalived restart
分别重启 master-1 和 master-2 节点上的 Keepalived 服务。如果配置成功,则进入 HAVIP 控制台将看到其中一台 ECS 实例已被选举为主节点,如下图所示:
在控制台侧“集群详情 - 服务列表 - Trino - 服务参数”修改 CoreGroup 的 discovery.uri
配置项为通过 HAVIP 访问域名(端口不变),例如:
discovery.uri=http://virtual.emr-d2bc7871c9xxx.cn-beijing.emr-volces.com:9084
如果启用了 LDAP,则需要分别在 master-1 和 master-2 节点上执行如下指令重新生成 keystore 和 truststore 证书:
keytool -genkeypair \ -alias trino \ -validity 3650 \ -keyalg RSA \ -keystore ${keystore_path} \ -keypass ${keystore_pass} \ -storepass ${keystore_pass} \ -dname 'CN=${HAVIP 访问域名}, OU=emr, O=ByteDance, L=Beijing, ST=Beijing, C=CN'
其中 keystore_path 和 keystore_pass 可以分别在控制台侧通过 http-server.https.keystore.path
和 http-server.https.keystore.key
参数获取。生成 keystore 证书示例:
keytool -genkeypair \ -alias trino \ -validity 3650 \ -keyalg RSA \ -keystore /etc/emr/trino/keystore/keystore.jks \ -keypass ****** \ -storepass ****** \ -dname 'CN=virtual.emr-d2bc78xxx.cn-beijing.emr-volces.com, OU=emr, O=ByteDance, L=Beijing, ST=Beijing, C=CN'
keytool -import -v -trustcacerts \ -alias trino_trust \ -validity 3650 \ -file ${ldap_cert_path} \ -keystore ${truststore_path} \ -storepass ${truststore_pass} \ -keypass ${truststore_pass} \ -noprompt
其中 ldap_cert_path、truststore_path 和 truststore_pass 可以分别在控制台侧通过 trino.ldap-cert-path
、http-server.https.truststore.path
和 http-server.https.truststore.key
参数获取。生成 truststore 证书示例:
keytool -import -v -trustcacerts \ -alias trino_trust \ -validity 3650 \ -file /etc/emr/openldap/conf/CA/ldap.cert.pem \ -keystore /etc/emr/trino/truststore/truststore.jks \ -storepass ****** \ -keypass ****** \ -noprompt
执行完上述操作后需要重启 Trino 服务,然后将 --server
参数设置为 HAVIP 访问域名后连接 Trino 集群,例如:
trino \ --server https://virtual.emr-d2bc787xxx.cn-beijing.emr-volces.com:9085 \ --user zhenchao \ --password
当主节点宕机时 HAVIP 会自动重新选主,如果只是主节点上的 Coordinator 服务异常,则可以在该节点上通过手动执行 service keepalived restart
触发主节点切换,正常情况下 Trino 将自动切换到新的主节点上的 Coordinator 提供服务,这一操作默认对客户端透明。
基于 HAVIP 实现 Trino 高可用的同时也存在如下限制,您需要事先评估以决定是否采用:
如果同一个 HAVIP 实例在集群上被应用于多个组件的 HA 方案,则在异常情况下可能存在相互干扰的风险,尤其是配置了自动故障切换的场景,极端情况下会导致故障切换死循环。
HAVIP 服务目前处于邀测状态,您需要通过申请才能使用该服务,且限制每个 VPC 最多允许创建 5 个 HAVIP 实例。