You need to enable JavaScript to run this app.
导航
高阶使用
最近更新时间:2024.01.29 20:09:45首次发布时间:2022.11.30 10:22:10

1 Connector 配置

1.1 内置 Connector

火山引擎 E-MapReduce(EMR)Presto 内置了 TPC-H、Hive、Iceberg 和 Hudi 连接器配置,如果您在安装 Presto 服务时已安装 Hive 服务,则 EMR 会自动生成对应的 Connector 配置文件。如果 Hive 服务是在 Presto 之后安装,则需要您在控制台侧手动重启 Presto 服务以触发生成 Connector 配置。

说明

EMR 只有在检测已安装 Hive 服务的前提下,才会自动生成 Hive、Iceberg 和 Hudi 的 Connector 配置文件。

内置 Connector 通常采用最小化配置,如果您需要对内置 Connector 配置进行修改,可以参考 Presto 官方文档 的 Connector 配置说明,并在 EMR 控制台“集群详情 > 服务列表 > Presto > 服务参数”中对具体 Connector 的配置进行调整。

1.2 自定义 Connector

如果内置 Connector 不能满足您的需求,EMR 也支持您在控制台侧自定义 Connector 配置。您可以在 EMR 控制台“集群详情 > 服务列表 > Presto > 服务参数”页面找到并编辑 custom-connector.properties 配置文件,通过“添加自定义参数”添加自定义 Connector 配置。

如上图所示演示了添加 MySQL Connector 的自定义配置,其中:

  • 参数名称:目标数据源在 Presto 中的 Catalog 名称。

  • 参数值:目标数据源的 Connector 配置,可以参考 Presto 官方文档

2 资源组配置

Presto 支持资源组配置以限制资源的使用,尽量避免 SQL 任务因资源不足而失败,详细介绍可以参考 Presto 官方文档

如果您希望对 Presto 资源组进行配置,可以在 EMR 控制台“集群详情 > 服务列表 > Presto > 服务参数”页面修改 resource-groups.json 配置文件的参数值(JSON 格式)。如下图所示:

3 Hive 内置 UDF/UDAF 支持

Presto 支持 Hive 内置 UDF/UADF,EMR 也在安装 Presto 时默认启用了这一特性,因此可以在您的 SQL 中可以参考如下示例使用 Hive 内置的 UDF/UADF:

# hive built-in udf:
SELECT hive.default.concat('f', 'b'); 
 _col0
-------
 fb
(1 row)

# hive built-in udaf:
select hive.default.avg(nationkey) from tpch.tiny.nation;
 _col0
-------
  12.0
(1 row)

4 服务化 Web UI

Presto 内置 Web UI 为查看和诊断 Presto 及其 SQL 任务的运行状态提供了有力支撑,您可以在“集群详情 > 访问链接 > 服务链接”中找到 Presto UI 的访问入口。

与此同时,EMR 也提供了服务化的 Presto UI。相较于集群内置的 Presto UI,服务化的 Presto UI 在兼容开源使用方式的同时,将 Presto 作业运行数据抽离到集群之外进行存储和展示,从而支持集群在被释放之后仍然可以对作业进行诊断。

服务化 Presto UI 默认对集群的作业运行数据提供 30 天的存储和查看支持。同时,在数据存储层面做到了租户隔离,并在访问层面集成了 IAM 准入认证,以充分保障数据的安全性。如果您希望使用服务化的 Presto UI,可以在创建集群时,在“高级设置”中启用持久化 History Server,如下图所示:

对于启用了持久化 History Server 的集群,在集群创建完成后添加安装的 Presto 服务仍然会开启服务化的 Web UI。您可以在“集群详情 > 访问链接 > 持久化 History Server”页面找到服务化 Presto UI 的访问入口,如下图所示:

Presto 服务化 Web UI 现阶段只展示已完成或失败的作业,如果您希望查看运行中的作业运行状态,仍然可以访问集群内置的 Web UI。

5 基于 HAVIP 实现高可用

高可用虚拟 IP(即 HAVIP)是一种可独立持有,并根据实际业务需要随时创建或删除的私网 IP 资源。HAVIP 通常与高可用组件(如 Keepalived)搭配使用,以搭建高可用主备服务。关于 HAVIP 更详细的介绍可以参考 官方文档

对于启用了高可用(简称 HA)的集群,EMR 会在您集群的 master-1 和 master-2 节点上分别运行 Presto Coordinator,但默认只有 master-1 上的 Coordinator 提供服务。本小节将介绍如何基于“HAVIP + Keepalived”手动配置,以实现让 master-1 和 master-2 节点上的 Coordinator 协作提供 HA 服务能力。
EMR HA 集群默认会在集群 master 节点上安装 Keepalived 组件,在具体开始配置之前您需要对 HAVIP 实例做如下配置:

  1. 已完成 HAVIP 实例的创建,且该实例需要与目标集群位于同一 VPC,如果需要跨 VPC 访问您集群的 Presto,建议为 HAVIP 实例绑定公网 IP。

  2. 已完成 HAVIP 实例与目标集群 master-1 和 master-2 ECS 实例的绑定。

  3. 已完成 HAVIP 访问域名申请和配置,现阶段这一步需要您联系火山 EMR 同学进行处理

本小节使用到的 HAVIP 基本信息如下:

属性
私网 IP192.168.3.3
访问域名virtual.emr-d2bc7871c91xxx.cn-beijing.emr-volces.com

5.1 Keepalived 配置

修改集群 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 实例已被选举为主节点,如下图所示:

5.2 Presto 配置

在控制台侧“集群详情 - 服务列表 - Presto - 服务参数”修改 CoreGroup 的 discovery.uri 配置项为通过 HAVIP 访问域名(端口不变),例如:

discovery.uri=http://virtual.emr-d2bc7871c91xxx.cn-beijing.emr-volces.com:8084

如果启用了 LDAP,则需要分别在 master-1 和 master-2 节点上执行如下指令重新生成 keystore 和 truststore 证书:

  • 生成 keystore 证书
keytool -genkeypair \
        -alias presto \
        -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.pathhttp-server.https.keystore.key 参数获取。生成 keystore 证书示例:

keytool -genkeypair \
        -alias presto \
        -validity 3650 \
        -keyalg RSA \
        -keystore /etc/emr/presto/keystore/keystore.jks \
        -keypass ****** \
        -storepass ****** \
        -dname 'CN=virtual.emr-d2bc7871c917xxx.cn-beijing.emr-volces.com, OU=emr, O=ByteDance, L=Beijing, ST=Beijing, C=CN'
  • 生成 truststore 证书
keytool -import -v -trustcacerts \
        -alias presto_trust \
        -validity 3650 \
        -file ${ldap_cert_path} \
        -keystore ${truststore_path} \
        -storepass ${truststore_pass} \
        -keypass ${truststore_pass} \
        -noprompt

其中 ldap_cert_path、truststore_path 和 truststore_pass 可以分别在控制台侧通过 presto.ldap-cert-pathhttp-server.https.truststore.pathhttp-server.https.truststore.key 参数获取。生成 truststore 证书示例:

keytool -import -v -trustcacerts \
        -alias presto_trust \
        -validity 3650 \
        -file /etc/emr/openldap/conf/CA/ldap.cert.pem \
        -keystore /etc/emr/presto/truststore/truststore.jks \
        -storepass ****** \
        -keypass ****** \
        -noprompt

执行完上述操作后需要重启 Presto 服务,然后将 --server 参数设置为 HAVIP 访问域名后连接 Presto 集群,例如:

presto \
  --server https://virtual.emr-d2bc7871cxxxx.cn-beijing.emr-volces.com:8085 \
  --user zhenchao \
  --password

5.3 HA 切换

当主节点宕机时 HAVIP 会自动重新选主,如果只是主节点上的 Coordinator 服务异常,则可以在该节点上通过手动执行 service keepalived restart 触发主节点切换,正常情况下 Presto 将自动切换到新的主节点上的 Coordinator 提供服务,这一操作默认对客户端透明。

5.4 使用限制

基于 HAVIP 实现 Presto 高可用的同时也存在如下限制,您需要事先评估以决定是否采用:

  1. 如果同一个 HAVIP 实例在集群上被应用于多个组件的 HA 方案,则在异常情况下可能存在相互干扰的风险,尤其是配置了自动故障切换的场景,极端情况下会导致故障切换死循环。

  2. HAVIP 服务目前处于邀测状态,您需要通过申请才能使用该服务,且限制每个 VPC 最多允许创建 5 个 HAVIP 实例。