You need to enable JavaScript to run this app.
文档中心
E-MapReduce

E-MapReduce

复制全文
下载 pdf
Doris
Doris 存算分离多计算组最佳实践
复制全文
下载 pdf
Doris 存算分离多计算组最佳实践

概述

在存算分离架构中,计算节点与共享存储相互独立。您可以将一组 BE 节点组成一个计算组(Compute Group),以实现查询与导入任务的资源隔离和弹性管理。在包含多个计算组的环境中,确保查询、导入任务和外部工具能正确路由到指定的计算组,可以保障生产环境的稳定性。
如果在操作时未明确指定计算组,Doris 会根据当前会话、用户默认设置以及用户权限选择可用的计算组。为避免任务路由到非预期的计算组,我们建议在生产环境中为用户设置默认的计算组,并在执行关键的查询或导入任务时显式指定计算组。

说明

本文介绍的语法基于 Doris 3.0.8 和 4.0 版本。从 Doris 4.0 版本开始,在 Query、Stream Load 和 Flink Doris Connector 场景中,cloud_cluster 和 compute_group 两种写法均受支持且效果相同。更多信息,请参见官方文档:Compute Group 与存算分离运维指南。

前提条件

在普通用户使用前,管理员需要为其授予 USAGE_PRIV 权限。关于授权和计算组管理的更多操作说明,请参见官方文档 Compute Group。
例如,为用户 jack 授予使用 query_group 和 load_group 两个计算组的权限:

GRANT USAGE_PRIV ON COMPUTE GROUP query_group TO 'jack';
GRANT USAGE_PRIV ON COMPUTE GROUP load_group TO 'jack';

为用户指定默认计算组

您可以为用户预设一个默认计算组。用户连接后未做任何切换操作时,所有任务将默认路由到此计算组。
以下示例中,管理员(拥有 Admin 权限)为用户 jack 指定默认计算组为 query_group:

SET PROPERTY FOR 'jack'
'default_compute_group' = 'query_group';

用户也可以为自己设置默认的计算组:

SET PROPERTY
'default_compute_group' = 'query_group';

设置后,可以使用 SHOW PROPERTY 命令进行验证:

-- 查看指定用户的属性
SHOW PROPERTY FOR 'jack';

-- 查看当前用户的属性
SHOW PROPERTY;

为查询指定计算组

在当前会话中切换

您可以在当前会话中切换到指定计算组。此操作会影响后续在该会话中执行的所有查询。
以下示例在当前会话中切换到 query_group,后续的 SELECT 查询将在该计算组中执行:

-- 仅切换计算组
USE @query_group;

-- 同时指定数据库和计算组
USE my_db@query_group;

-- 后续查询将在此计算组中执行
SELECT * FROM my_table;

此切换操作仅对当前会话生效。
您可以通过以下命令查看所有可用的计算组以及当前所在的组:

SHOW COMPUTE GROUPS;

为单条查询指定

从 Doris 4.0 版本开始,您可以通过 Hint (cloud_cluster 或 compute_group) 为单条 SQL 查询指定计算组。
以下示例使用 SET_VAR Hint 让当前查询在 query_group 中执行:

SELECT /*+ SET_VAR(cloud_cluster='query_group') */
       *
FROM my_db.my_table;

说明

SET_VAR(cloud_cluster=...) 适合为单条 SQL 进行临时路由。如果需要连续执行多条查询,建议使用 USE @group 切换会话。

为导入任务指定计算组

Stream Load

您可以通过在 HTTP Header 中设置 cloud_cluster 参数,为 Stream Load 任务指定计算组。从 Doris 4.0 版本起,也支持使用等效的 compute_group 参数。
以下示例通过 curl 命令提交 Stream Load 任务,并使用 -H "cloud_cluster:load_group" Header 指定在 load_group 中执行:

curl --location-trusted -u jack:password \
 -H "label:load_001" \
 -H "cloud_cluster:load_group" \
 -H "column_separator:," \
 -T data.csv \
 -X PUT http://fe_host:8030/api/my_db/my_table/_stream_load

建议将请求发送至 FE 并开启重定向功能。通过 Header 指定的计算组优先级高于用户设置的默认组。完整的语法和参数说明,请参见官方文档 Stream Load。

Flink Doris Connector 在底层通过 Stream Load 写入数据。您可以设置 sink.properties.cloud_cluster 参数,将计算组配置透传给 Stream Load 任务。从 Doris 4.0 版本开始,也支持使用 sink.properties.compute_group 参数,两者效果相同。
以下示例在 Flink SQL 中创建 Doris Sink 表时,通过 'sink.properties.cloud_cluster' = 'load_group' 参数指定计算组:

CREATE TABLE doris_sink (
  id BIGINT,
  name STRING,
  PRIMARY KEY (id) NOT ENFORCED
) WITH (
  'connector' = 'doris',
  'fenodes' = 'fe_host:8030',
  'table.identifier' = 'my_db.my_table',
  'username' = 'jack',
  'password' = 'password',
  'auto-redirect' = 'true',
  'sink.label-prefix' = 'flink_load',
  'sink.properties.cloud_cluster' = 'load_group'
);

说明

设置 auto-redirect=true 可以确保请求首先发送至 FE,再由 FE 根据指定的计算组选择合适的 BE 节点。更多参数和使用方法,请参见官方文档 Flink Doris Connector。

Broker Load

Broker Load 会在任务创建时绑定当前会话的计算组。因此,您需要先切换到目标计算组,再提交 Broker Load 任务。任务提交后,将持续使用创建时绑定的计算组。更多说明,请参见官方文档 Broker Load。
以下示例分两步提交 Broker Load 任务:

-- 1. 切换到用于导入的计算组
USE my_db@load_group;

-- 2. 提交 Broker Load 任务
LOAD LABEL my_db.broker_load_001
(
  DATA INFILE("s3://bucket/path/data.csv")
  INTO TABLE my_table
  FORMAT AS "CSV"
)
WITH S3
(
  "AWS_ENDPOINT" = "https://s3.example.com",
  "AWS_ACCESS_KEY" = "******",
  "AWS_SECRET_KEY" = "******",
  "AWS_REGION" = "region"
)
PROPERTIES
(
  "timeout" = "3600"
);

Routine Load

与 Broker Load 类似,Routine Load 也会在任务创建时绑定计算组。您需要在创建任务前使用 USE @group 切换会话。一旦任务创建,其计算组便无法更改。更多说明,请参见官方文档 Routine Load。
以下示例分两步创建 Routine Load 任务:

-- 1. 切换到用于导入的计算组
USE my_db@load_group;

-- 2. 创建 Routine Load 任务
CREATE ROUTINE LOAD my_db.kafka_job ON my_table
COLUMNS TERMINATED BY ","
PROPERTIES
(
  "desired_concurrent_number" = "3"
)
FROM KAFKA
(
  "kafka_broker_list" = "kafka_host:9092",
  "kafka_topic" = "my_topic",
  "property.kafka_default_offsets" = "OFFSET_BEGINNING"
);

为 JDBC 连接指定计算组

您可以在 JDBC URL 的数据库名后通过 @ 符号追加计算组名称来指定计算组。
以下示例在 JDBC 连接字符串中直接指定 query_group:

jdbc:mysql://fe_host:9030/my_db@query_group

对于使用连接池的场景,您也可以在获取连接后,通过执行 USE 命令来切换计算组。
以下示例在获取连接后,执行 USE 命令将会话切换到 query_group:

USE my_db@query_group;

为 Superset 指定计算组

建议为 Superset 创建一个独立的 Doris 用户,并为其绑定默认的计算组。这样做可以避免因连接池复用而导致查询路由到错误的计算组(即路由漂移)。
以下示例创建专用的 superset_user 并设置其默认计算组:

-- 1. 为 Superset 用户授权
GRANT USAGE_PRIV ON COMPUTE GROUP query_group TO 'superset_user';

-- 2. 为该用户设置默认计算组
SET PROPERTY FOR 'superset_user'
'default_compute_group' = 'query_group';

您也可以在配置 Superset 数据库连接时,通过 init_command 参数为每个新连接设置初始命令。
以下示例在 SQLAlchemy URI 中添加 init_command 参数:

doris://superset_user:password@fe_host:9030/my_db?init_command=use @compute_group_name

更多配置说明,请参见官方文档 Superset。

最近更新时间:2026.10.22 15:53:01
这个页面对您有帮助吗?
有用
有用
无用
无用