快速使用Doris
在企业数据分析场景中,业务系统积累了海量的结构化数据,需要对这些数据进行快速查询和分析以支持业务决策。传统的关系型数据库在面对大规模数据分析时,查询性能往往无法满足实时性要求,而大数据方案又过于复杂,部署和维护成本高。如何在保证查询性能的同时,降低数据分析的复杂度?Doris正是为解决这一问题而设计的高性能实时分析数据库。Doris基于MPP(大规模并行处理)架构,支持高并发的点查询和高吞吐的复杂分析场景,通过简单的SQL接口即可实现亚秒级查询响应。本文通过示例介绍如何快速使用MRS Doris集群进行基本的建表、数据导入和查询操作。
- FE(Frontend):Doris的前端节点,负责接收客户端请求、解析SQL、生成执行计划、管理元数据和调度查询。FE节点通过MySQL协议与客户端通信。
- BE(Backend):Doris的后端节点,负责数据存储和查询执行。BE节点以列式格式存储数据,通过向量化执行引擎处理查询请求。
- Stream Load:Doris提供的数据导入方式,通过HTTP协议将本地文件或数据流导入到Doris表中。Stream Load适用于单次导入数据量在GB级别的场景。
约束与限制
- Doris数据库名和表名区分大小写。
- Doris表名不能为纯数字。
前提条件
- 已创建包含Doris服务的集群,集群内各服务运行正常。
- 待连接Doris数据库的节点与MRS集群网络互通。
- 已安装MySQL客户端,相关操作可参考使用MySQL客户端连接Doris。
操作步骤
- 创建具有Doris管理权限的用户。
- 集群已启用Kerberos认证(安全模式)
- 登录FusionInsight Manager,选择“系统 > 权限 > 角色 > 添加角色”,填写角色名称,如“dorisrole”,在“配置资源权限”选择“待操作的集群 > Doris”,勾选“Doris管理员权限”,单击“确定”。
- 选择“用户 > 添加用户”,填写用户名称,如“dorisuser”,“用户类型”选择“人机”,“密码策略”默认,输入用户密码并确认密码,关联“dorisrole”角色,单击“确定”。
- 使用新建的dorisuser用户重新登录FusionInsight Manager,修改该用户初始密码。
- 集群未启用Kerberos认证(普通模式)
- 登录安装了MySQL客户端的节点,使用admin用户连接Doris服务。
mysql -uadmin -P数据库连接端口 -hDoris FE实例IP地址
- admin用户默认密码为空。
- 数据库连接端口为Doris FE的查询连接端口,可以通过登录Manager,单击“集群 > 服务 > Doris > 配置”,查询Doris服务的“query_port”参数获取。
- Doris FE实例IP地址可通过登录MRS集群的Manager界面,单击“集群 > 服务 > Doris > 实例”,查看任一FE实例的IP地址。
- 用户也可以使用MySQL连接软件或者Doris WebUI界面连接数据库。
- 仅MRS 3.3.0及之后版本的开启Kerberos认证的集群支持通过FusionInsight Manager创建角色进行赋权,如果集群为MRS 3.3.0之前的版本,无论是否开启Kerberos认证,都需要通过root用户(默认密码为空)来连接数据库。
- 执行以下命令创建角色:
CREATE ROLE dorisrole;
- 执行以下命令给角色授权,具体权限介绍请参见Doris用户权限说明。例如,授予角色ADMIN_PRIV权限:
GRANT ADMIN_PRIV ON *.*.* TO ROLE 'dorisrole';
- 执行以下命令创建用户并绑定角色:
CREATE USER 'dorisuser'@'%' IDENTIFIED BY 'password' DEFAULT ROLE 'dorisrole';
命令中如果携带认证密码信息可能存在安全风险,在执行命令前建议关闭系统的history命令记录功能,避免信息泄露。
- 登录安装了MySQL客户端的节点,使用admin用户连接Doris服务。
- 集群已启用Kerberos认证(安全模式)
- 登录安装了MySQL的节点,执行以下命令连接Doris数据库。
如果集群已启用Kerberos认证(安全模式),需先执行以下命令再连接Doris数据库:
export LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN=1
mysql -u数据库登录用户 -p数据库登录用户密码 -P数据库连接端口 -hDoris FE实例IP地址
- 数据库连接端口为Doris FE的查询连接端口,可以通过登录Manager,单击“集群 > 服务 > Doris > 配置”,查询Doris服务的“query_port”参数获取。
- Doris FE实例IP地址可通过登录MRS集群的Manager界面,单击“集群 > 服务 > Doris > 实例”,查看任一FE实例的IP地址。
- 用户也可以使用MySQL连接软件或者Doris WebUI界面连接数据库。
- 执行以下命令可查看FE运行状态。
SHOW FRONTENDS\G;
SHOW BACKENDS\G;
- 执行以下命令创建数据库:
create database if not exists mrs_demo;
use mrs_demo;
- 执行以下命令在数据库中创建数据表:
CREATE TABLE IF NOT EXISTS mrs_table ( `user_id` LARGEINT NOT NULL COMMENT "用户id", `date` DATE NOT NULL COMMENT "数据灌入日期", `city` VARCHAR(20) COMMENT "城市", `age` SMALLINT COMMENT "年龄", `gender` TINYINT COMMENT "性别", `last_visit_date` DATETIME REPLACE DEFAULT "1970-01-01 00:00:00" COMMENT "用户最后一次访问时间", `cost` BIGINT SUM DEFAULT "0" COMMENT "用户总消费", `max_dwell_time` INT MAX DEFAULT "99999" COMMENT "用户最大停留时间", `min_dwell_time` INT MIN DEFAULT "0" COMMENT "用户最小停留时间" ) AGGREGATE KEY(`user_id`, `date`, `city`, `age`, `gender`) DISTRIBUTED BY HASH(`user_id`) BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1" );
- 在当前节点的任意目录下创建“test.csv”文件,内容如下:
10000,2017-10-01,city1,20,0,2017-10-01 06:00:00,20,10,10 10000,2017-10-01,city2,20,0,2017-10-01 07:00:00,15,2,2 10001,2017-10-01,city3,30,1,2017-10-01 17:05:45,2,22,22 10002,2017-10-02,city4,20,1,2017-10-02 12:59:12,200,5,5 10003,2017-10-02,city5,32,0,2017-10-02 11:20:00,30,11,11 10004,2017-10-01,city6,35,0,2017-10-01 10:00:15,100,3,3 10004,2017-10-03,city7,35,0,2017-10-03 10:20:22,11,6,6
- 通过Stream Load方式将“test.csv”中的数据导入到5创建的表中。
cd test.csv所在目录
curl -k --location-trusted -u doris用户名:用户密码 -H "label:table1_20230217" -H "column_separator:," -T test.csv http://Doris FE实例IP地址:HTTP端口/api/mrs_demo/mrs_table/_stream_load
- Doris FE实例IP地址可在Manager界面,选择“集群 > 服务 > Doris > 实例”查看。
- HTTP端口号可在Manager界面,选择“集群 > 服务 > Doris > 配置”,搜索“http_port”查看。
- 执行以下命令查询数据:
select * from mrs_table where city='city1';
验证操作:
执行以下命令验证数据导入是否成功:
select count(*) from mrs_table;
如果返回结果为7,则表示数据导入成功。也可以执行以下命令查看特定条件的数据:
select * from mrs_table where city='city1';
常见问题
- 连接Doris失败
连接失败的常见原因包括:网络不通、端口错误、用户名密码错误、FE节点未启动等。
请确认客户端节点与Doris FE节点网络互通,检查query_port端口是否正确,确认用户名密码正确。在Manager的服务页面查看FE节点状态是否正常。
- Stream Load导入失败
导入失败的常见原因包括:HTTP端口错误、用户名密码错误、文件格式不正确、表不存在等。
请确认http_port端口正确,用户名密码正确,CSV文件格式与表结构匹配,表已创建成功。查看curl命令的返回信息,根据错误提示定位问题。
- 查询结果为空
查询结果为空可能是因为数据未导入成功,或者查询条件不匹配。
先执行select count(*) from mrs_table;确认数据是否导入。如果数据已导入但查询结果为空,请检查查询条件是否正确,注意字符串比较区分大小写。
相关文档
- 了解如何使用MySQL客户端连接Doris,请参考使用MySQL客户端连接Doris。
- 了解Doris用户权限说明,请参考Doris用户权限说明。
- 了解如何访问Doris WebUI页面查看组件状态,请参考访问Doris WebUI页面。