跳到主要内容

弹性计算节点

弹性计算节点作为一种特殊类型的 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 BACKENDSNodeRole 列可以看到节点类型为 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_tabletrue 时生效。如果集群内计算节点的个数小于这个值,外部表的查询会尝试获取一些混合节点来分配,以使节点总数达到这个值。如果集群内计算节点的个数大于这个值,外部表的查询将只分配给计算节点。在 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 节点数量。

注:

  1. 2.1 版本之后,才支持 min_backend_num_for_external_table 设置为 -1。之前的版本,该参数必须为正数。且该参数只有在 prefer_compute_node_for_external_table = true 的情况下才生效。

  2. 如果 min_backend_num_for_external_table 值大于总的 BE 节点数量,则最多只会选择全部的 BE。

  3. 以上参数可以通过 ADMIN SET FRONTEND CONFIG 命令动态修改,不需要重启 FE 节点。且所有 FE 节点都需配置。或者在 fe.conf 中添加配置并重启 FE 节点。

最佳实践

联邦查询的负载隔离和弹性伸缩

在联邦查询场景下,用户可以专门部署一组计算节点,用于外表数据的查询。这样可以将外表的查询负载(如在 hive 上进行大数量分析)和内表的查询负载(如低延迟的快速数据分析)进行隔离。

同时,计算节点作为无状态的 BE 节点,可以方便的进行扩容和缩容。比如可以使用 k8s 部署一组弹性计算节点集群,在业务高峰期利用更多的计算节点进行数据湖分析,低谷期可以进行快速缩容以降低成本。

常见问题

  1. 混合节点和计算节点能否相互转换

计算节点可以转换为混合节点。但混合节点不可以转换为计算节点。

  1. 计算节点是否需要配置数据存储目录

需要。计算节点的数据存储目录不会存放用户数据,只会存放一些 BE 节点自身的信息文件,如 cluster_id 等。以及一些运行过程中的临时文件等。

计算节点的存储目录只需要很少的磁盘空间即可(MB 级别),并且可以随时和节点一起销毁,不会对用户数据造成影响。

  1. 计算节点和混合节点是否可以配置文件缓存目录

文件缓存 通过缓存最近访问的远端存储系统 (HDFS 或对象存储) 的数据文件,加速后续访问相同数据的查询。

计算节点和混合节点均可设置文件缓存目录。文件缓存目录需事先创建。

  1. 计算节点是否需要通过 DECOMMISION 操作下线

不需要。计算节点可以直接通过 DROP BACKEND 操作删除。

  1. 在计算节点上查询内表报错 has no queryable replicas

这是符合预期的行为。computation 类型的 BE 节点不会服务任何内表查询。如果集群内所有 BE 节点都是 computation 类型(或集群内 mix 节点不足以承载内表的副本),对内表的查询就会失败并报此错误。

解决方法:在集群中保留或新增至少一个 mix 类型的 BE 节点用于承载内表查询。

  1. 存算分离模式下 SHOW BACKENDS 显示的 NodeRole 始终是 mix,是否表示 be_node_role = computation 配置没生效

没有这个意思。在存算分离模式下,SHOW BACKENDSNodeRole 列始终显示为 mix,这是已知的显示行为,与 be.confbe_node_role 的实际配置无关。该参数在存算分离模式下仍然生效,配置为 computation 的节点同样只会参与外表查询。