弹性计算节点
弹性计算节点作为一种特殊类型的 BE 节点,没有数据存储能力,只负责数据计算。因此,可以将计算节点看做是无状态的 BE 节点,可以方便的进行节点的增加和删除。
在湖仓数据分析场景中,弹性计算节点可用于查询外部数据源,如 Hive、Iceberg、Hudi、Paimon、JDBC 等。Doris 不负责外部数据源数据的存储,因此,可以使用弹性计算节点方便的扩展对外部数据源的计算能力。同时,计算节点也可以配置缓存目录,用于缓存外部数据源的热点数据,进一步加速数据读取。
弹性计算节点在存算一体和存算分离两种模式下均可使用,主要用于将数据湖(外表)查询与内表查询的计算资源进行隔离:
- 存算一体模式:BE 节点默认是
mix类型,同时承担数据存储和计算。可以单独部署一组computation类型的 BE 节点专门用于外表查询,并方便的进行弹性扩缩容,而不影响内表的数据存储。 - 存算分离模式:BE 节点本身已是无状态的,可以方便的进行扩缩容。但仍然可以通过将部分 BE 节点设置为
computation类型,将其专用于数据湖(外表)查询,从而和服务内表查询的 BE 节点进行负载隔离。
- 设置为
computation类型的 BE 节点仅服务数据湖(外表)查询,不会处理任何内表查询请求。如果集群中所有 BE 节点都被设置为computation,对内表的查询会失败并报错has no queryable replicas。因此,请确保集群中至少保留一个mix类型的 BE 节点来承载内表查询。 - 在存算分离模式下,
SHOW BACKENDS显示的NodeRole列始终为mix,与 BE 配置文件中的be_node_role设置无关。这是已知的显示行为,节点的实际角色仍以be.conf中的be_node_role配置为准。
计算节点的使用
BE 节点类型
在存算一体模式下,BE 节点分为两类:
-
Mix
混合节点。即 BE 节点的默认类型。该类型的节点既参与计算,也负责 Doris 内表数据的存储。
-
Computation
弹性计算节点。不负责数据的存储,只负责数据计算。
添加计算节点
在 BE 的 be.conf 配置文件中增加配置:
be_node_role=computation
之后启动 BE 节点,该节点就会以 Computation 类型运行。
之后可以通过连接 Doris 并执行:
ALTER SYSTEM ADD BACKEND
添加这个 BE 节点。添加成功后,在 SHOW BACKENDS 的 NodeRole 列可以看到节点类型为 computation。
使用计算节点
需要再 FE 配置文件 fe.conf 中配置如下参数,以启用计算节点并控制计算节点的行为:
| 参数名称 | 说明 |
|---|---|
prefer_compute_node_for_external_table | 默认为 false。如果设置为 true,外部表的查询将优先分配给计算节点。如果为 false,外部表的查询将分配给任意 BE 节点。如果集群内没有计算节点,则该参数无效果。 |
min_backend_num_for_external_table | 只有当 prefer_compute_node_for_external_table 为 true 时生效。如果集群内计算节点的个数小于这个值,外部表的查询会尝试获取一些混合节点来分配,以使节点总数达到这个值。如果集群内计算节点的个数大于这个值,外部表的查询将只分配给计算节点。在 2.0(含)版本之前,该参数的默认值为 3。2.1 版本之后,默认值为-1,表示只使用当前数量的计算节点 |
对 min_backend_num_for_external_table 的进一步举例说明:
假设集群内有 3 个计算节点,5 个混合节点。
如果 min_backend_num_for_external_table 设置小于等于 3。则外表查询只会使用 3 个计算节点。如果设置大于 3,假设为 6,则外表查询除了使用 3 个计算节点外,还会额外选择 3 个混合节点参与计算。
综上,该参数主要用于可参与外表计算的最少 BE 节点数量,并且会优先选择计算节点。调大这个参数,会让更多的 BE 节点(不限于计算节点)参与外表的查询处理;调小这个参数,则可以限制参与外表查询处理的 BE 节点数量。
注:
2.1 版本之后,才支持
min_backend_num_for_external_table设置为-1。之前的版本,该参数必须为正数。且该参数只有在prefer_compute_node_for_external_table = true的情况下才生效。如果
min_backend_num_for_external_table值大于总的 BE 节点数量,则最多只会选择全部的 BE。以上参数可以通过
ADMIN SET FRONTEND CONFIG命令动态修改,不需要重启 FE 节点。且所有 FE 节点都需配置。或者在fe.conf中添加配置并重启 FE 节点。
最佳实践
联邦查询的负载隔离和弹性伸缩
在联邦查询场景下,用户可以专门部署一组计算节点,用于外表数据的查询。这样可以将外表的查询负载(如在 hive 上进行大数量分析)和内表的查询负载(如低延迟的快速数据分析)进行隔离。
同时,计算节点作为无状态的 BE 节点,可以方便的进行扩容和缩容。比如可以使用 k8s 部署一组弹性计算节点集群,在业务高峰期利用更多的计算节点进行数据湖分析,低谷期可以进行快速缩容以降低成本。
常见问题
- 混合节点和计算节点能否相互转换
计算节点可以转换为混合节点。但混合节点不可以转换为计算节点。
- 计算节点是否需要配置数据存储目录
需要。计算节点的数据存储目录不会存放用户数据,只会存放一些 BE 节点自身的信息文件,如 cluster_id 等。以及一些运行过程中的临时文件等。
计算节点的存储目录只需要很少的磁盘空间即可(MB 级别),并且可以随时和节点一起销毁,不会对用户数据造成影响。
- 计算节点和混合节点是否可以配置文件缓存目录
文件缓存 通过缓存最近访问的远端存储系统 (HDFS 或对象存储) 的数据文件,加速后续访问相同数据的查询。
计算节点和混合节点均可设置文件缓存目录。文件缓存目录需事先创建。
- 计算节点是否需要通过 DECOMMISION 操作下线
不需要。计算节点可以直接通过 DROP BACKEND 操作删除。
- 在计算节点上查询内表报错
has no queryable replicas
这是符合预期的行为。computation 类型的 BE 节点不会服务任何内表查询。如果集群内所有 BE 节点都是 computation 类型(或集群内 mix 节点不足以承载内表的副本),对内表的查询就会失败并报此错误。
解决方法:在集群中保留或新增至少一个 mix 类型的 BE 节点用于承载内表查询。
- 存算分离模式下
SHOW BACKENDS显示的NodeRole始终是mix,是否表示be_node_role = computation配置没生效
没有这个意思。在存算分离模式下,SHOW BACKENDS 的 NodeRole 列始终显示为 mix,这是已知的显示行为,与 be.conf 中 be_node_role 的实际配置无关。该参数在存算分离模式下仍然生效,配置为 computation 的节点同样只会参与外表查询。