一、Doris的特点
Apache Doris是一个现代化的基于MPP(大规模并行处理)技术的分析型数据库产品。简单来说,MPP是将任务并行的分散到多个服务器和节点上,在每个节点上计算完成后,将各自部分的结果汇总在一起得到最终的结果(与Hadoop相似)。仅需亚秒级响应时间即可获得查询结果,有效地支持实时数据分析。Apache Doris可以满足多种数据分析需求,例如固定历史报表,实时数据分析,交互式数据分析和探索式数据分析等。令数据分析工作更加简单高效。
Apache Doris核心特性有以下几点:
• 基于MPP(大规模并行处理)架构的分析型数据库。
• 性能卓越,PB级别数据毫秒/秒级响应。
• 支持标准SQL语言,兼容MySQL协议。
• 向量化执行器。
• 高效的聚合表技术。
• 新型预聚合技术Rollup。
• 高性能、高可用、高可靠。
• 极简运维,弹性伸缩。
性能卓越TPC-H、TPC-DS性能领先,性价比高,高并发查询,100台集群可达10w QPS,流式导入单节点50MB/s,小批量导入毫秒延迟。
简单易用,高度兼容MySql协议;支持在线表结构变更高度集成,不依赖于外部存储系统.扩展性强架构优雅,单集群可以水平扩展至200台以上.高可用性多副本,元数据高可用。
二、Doris介绍
Apache Doris 是一个基于 MPP 架构的高性能、实时的分析型数据库,以极速易用的特点被人们所熟知,仅需亚秒级响应时间即可返回海量数据下的查询结果,不仅可以支持高并发的点查询场景,也能支持高吞吐的复杂分析场景。基于此,Apache Doris 能够较好的满足报表分析、即席查询、统一数仓构建、数据湖联邦查询加速等使用场景,用户可以在此之上构建用户行为分析、AB 实验平台、日志检索分析、用户画像分析、订单分析等应用。
Apache Doris 最早是诞生于百度广告报表业务的 Palo 项目,2017 年正式对外开源,2018 年 7 月由百度捐赠给 Apache 基金会进行孵化,之后在 Apache 导师的指导下由孵化器项目管理委员会成员进行孵化和运营。目前 Apache Doris 社区已经聚集了来自不同行业数百家企业的 400 余位贡献者,并且每月活跃贡献者人数也超过 100 位。 2022 年 6 月,Apache Doris 成功从 Apache 孵化器毕业,正式成为 Apache 顶级项目(Top-Level Project,TLP)
Apache Doris 如今在中国乃至全球范围内都拥有着广泛的用户群体,截止目前, Apache Doris 已经在全球超过 2000 家企业的生产环境中得到应用,在中国市值或估值排行前 50 的互联网公司中,有超过 80% 长期使用 Apache Doris,包括百度、美团、小米、京东、字节跳动、腾讯、网易、快手、微博、贝壳等。同时在一些传统行业如金融、能源、制造、电信等领域也有着丰富的应用。
三、使用场景
如下图所示,数据源经过各种数据集成和加工处理后,通常会入库到实时数仓 Doris 和离线湖仓(Hive, Iceberg, Hudi 中),Apache Doris 被广泛应用在以下场景中。
-
报表分析
实时看板 (Dashboards) - 面向企业内部分析师和管理者的报表
- 面向用户或者客户的高并发报表分析(Customer Facing Analytics)。比如面向网站主的站点分析、面向广告主的广告报表,并发通常要求成千上万的 QPS ,查询延时要求毫秒级响应。著名的电商公司京东在广告报表中使用 Apache Doris ,每天写入 100 亿行数据,查询并发 QPS 上万,99 分位的查询延时 150ms。
-
即席查询(Ad-hoc Query):面向分析师的自助分析,查询模式不固定,要求较高的吞吐。小米公司基于 Doris 构建了增长分析平台(Growing Analytics,GA),利用用户行为数据对业务进行增长分析,平均查询延时 10s,95 分位的查询延时 30s 以内,每天的 SQL 查询量为数万条。
-
统一数仓构建 :一个平台满足统一的数据仓库建设需求,简化繁琐的大数据软件栈。海底捞基于 Doris 构建的统一数仓,替换了原来由 Spark、Hive、Kudu、Hbase、Phoenix 组成的旧架构,架构大大简化。
-
数据湖联邦查询:通过外表的方式联邦分析位于 Hive、Iceberg、Hudi 中的数据,在避免数据拷贝的前提下,查询性能大幅提升。
四、Doris环境配置
1、安装需求
Doris 作为一款开源的 MPP 架构 OLAP 数据库,能够运行在绝大多数主流的商用服务器上。为了能够充分运用 MPP 架构的并发优势,以及 Doris 的高可用特性,我们建议 Doris 的部署遵循以下需求:
1)Linux 操作系统版本需求
Linux 系统 | 版本 |
---|---|
CentOS | 7.1 及以上 |
Ubuntu | 16.04 及以上 |
2)设置系统最大打开文件句柄数
vi /etc/security/limits.conf #文件目录路径
* soft nofile 65536
* hard nofile 65536
3)环境基本要求
1、开发测试环境
模块 | CPU | 内存 | 磁盘 | 网络 | 实例数量 |
---|---|---|---|---|---|
Frontend | 8核+ | 8GB+ | SSD 或 SATA,10GB+ * | 千兆网卡 | 1 |
Backend | 8核+ | 16GB+ | SSD 或 SATA,50GB+ * | 千兆网卡 | 1-3 * |
2、生产环境
模块 | CPU | 内存 | 磁盘 | 网络 | 实例数量(最低要求) |
---|---|---|---|---|---|
Frontend | 16核+ | 64GB+ | SSD 或 RAID 卡,100GB+ * | 万兆网卡 | 1-3 * |
Backend | 16核+ | 64GB+ | SSD 或 SATA,100G+ * | 万兆网卡 | 3 * |
注1:
FE 的磁盘空间主要用于存储元数据,包括日志和 image。通常从几百 MB 到几个 GB 不等。
BE 的磁盘空间主要用于存放用户数据,总磁盘空间按用户总数据量 * 3(3副本)计算,然后再预留额外 40% 的空间用作后台 compaction 以及一些中间数据的存放。
一台机器上虽然可以部署多个 BE,但只建议部署一个实例,同时只能部署一个 FE。如果需要 3 副本数据,那么至少需要 3 台机器各部署一个 BE 实例(而不是1台机器部署3个BE实例)。多个FE所在服务器的时钟必须保持一致(允许最多5秒的时钟偏差)
测试环境也可以仅适用一个 BE 进行测试。实际生产环境,BE 实例数量直接决定了整体查询延迟。
所有部署节点关闭 Swap。
注2:FE 节点的数量
FE 角色分为 Follower 和 Observer,(Leader 为 Follower 组中选举出来的一种角色,以下统称 Follower)。
FE 节点数据至少为1(1 个 Follower)。当部署 1 个 Follower 和 1 个 Observer 时,可以实现读高可用。当部署 3 个 Follower 时,可以实现读写高可用(HA)。
Follower 的数量必须为奇数,Observer 数量随意。
根据以往经验,当集群可用性要求很高时(比如提供在线业务),可以部署 3 个 Follower 和 1-3 个 Observer。如果是离线业务,建议部署 1 个 Follower 和 1-3 个 Observer。
通常我们建议 10 ~ 100 台左右的机器,来充分发挥 Doris 的性能(其中 3 台部署 FE(HA),剩余的部署 BE)
当然,Doris的性能与节点数量及配置正相关。在最少4台机器(一台 FE,三台 BE,其中一台 BE 混部一个 Observer FE 提供元数据备份),以及较低配置的情况下,依然可以平稳的运行 Doris。
如果 FE 和 BE 混部,需注意资源竞争问题,并保证元数据目录和数据目录分属不同磁盘。
Broker 部署
Broker 是用于访问外部数据源(如 hdfs)的进程。通常,在每台机器上部署一个 broker 实例即可。
五、下载 Doris
1、检查java版本
Doris 运行在 Linux 环境中,推荐 CentOS 7.x 或者 Ubuntu 16.04 以上版本,同时你需要安装 Java 运行环境(JDK版本要求为8),要检查你所安装的 Java 版本,请运行以下命令:
java -version
2、安装对应的java版本
yum install -y java-1.8.0-openjdk-devel.x86_64
3、下载 Doris 的最新二进制版本
建立LIUX文件夹 mkdir Doris cd /home mkdir 文件名称 下载下载 Doris 的最新二进制版本https://doris.apache.org/zh-CN/download
tar xf apache-doris-x.x.x.tar.xz #解压下载的二进制版本
4、拷贝文件FE和BE到指定目录下
为了更好区分安装我这边把FE和BE拷贝到我新建立的 Doris_bst下
在home文件下新增Doeis_bst mkdir dDoris_bst
拷贝到指定目录下
CP FE/ home/Doris_bst
CP BE/ home/doris_bst
六、安装Doris
1、配置FE
CD到FE目录下: CD home/Doris_bst/FE/conf 打开 fe.conf 文件进行配置 vi fe.conf
priority_networks=172.23.16.0/24 #配置Ip
meta_dir=/path/your/doris-meta #条件BE存储文件路径
这里你可以不配置,默认是在你的Doris FE 安装目录下的 doris-meta,
单独配置元数据目录,需要你提前创建好你指定的目录
./bin/start_fe.sh --daemon #启动PE
curl http://127.0.0.1:8030/api/bootstrap #查看PE运行状态
注释:这里 IP 和 端口分别是 FE 的 IP 和 http_port(默认8030),如果是你在 FE 节点执行,直接运行上面的命令即可。
如果返回结果中带有 "msg":"success"
字样,则说明启动成功。
你也可以通过 Doris FE 提供的Web UI 来检查,在浏览器里输入地址
http:// fe_ip:8030
1)MySQL client 5.7 下载安装
MySQL的Linux客户端官网下载地址https://downloads.mysql.com/archives/community/下载
mysql-community-client-8.0.27-1.el8.x86_64.rpm
mysql-community-client-plugins-8.0.27-1.el8.x86_64.rpm
mysql-community-common-8.0.27-1.el8.x86_64.rpm
mysql-community-libs-8.0.27-1.el8.x86_64.rpm
安装MySQL client 客户端
rpm -ivh mysql-community-*
2)链接FE
mysql -uroot -P9030 -h127.0.0.1
注意:
这里使用的 root 用户是 doris 内置的默认用户,也是超级管理员用户,具体的用户权限查看 权限管理
-P :这里是我们连接 Doris 的查询端口,默认端口是 9030,对应的是fe.conf里的 query_port
-h : 这里是我们连接的 FE IP地址,如果你的客户端和 FE 安装在同一个节点可以使用127.0.0.1。
执行下面的命令查看 FE 运行状态
show frontends\G;
链接成功
3)停止 FE 节点
Doris FE 的停止可以通过下面的命令完成
./bin/stop_fe.sh
2、配置 BE
CD到BE目录下: CD home/Doris_bst/BE/conf 打开 be.conf 文件进行配置 vi be.conf
priority_networks=172.23.16.0/24 #配置ip
storage_root_path=/path/your/data_dir #
注意:
默认目录在 BE安装目录的 storage 目录下。
BE 配置的存储目录必须先创建好
由于从 1.2 版本开始支持 Java UDF 函数,BE 依赖于 Java 环境。所以要预先配置 `JAVA_HOME` 环境变量,也可以在 `start_be.sh` 启动脚本第一行添加 `export JAVA_HOME=your_java_home_path` 来添加环境变量。
安装 Java UDF 函数
SinceVersion 1.2.0安装Java UDF 函数因为从1.2 版本开始支持Java UDF 函数,需要从官网下载 Java UDF 函数的 JAR 包放到 BE 的 lib 目录下,否则可能会启动失败。
1)、启动 BE
./bin/start_be.sh --daemon
2)、添加 BE 节点到集群
通过MySQL 客户端连接到 FE 之后执行下面的 SQL,将 BE 添加到集群中
在mysql里面执行 ALTER SYSTEM ADD BACKEND "be_host_ip:heartbeat_service_port";
ALTER SYSTEM ADD BACKEND "IP地址或者计算机名称:端口号默认是9050";
be_host_ip:这里是你 BE 的 IP 地址,和你在 be.conf 里的 priority_networks 匹配
heartbeat_service_port:这里是你 BE 的心跳上报端口,和你在 be.conf 里的 heartbeat_service_port 匹配,默认是 9050。
3、查看BE运行状态
在mysql 里面执行 SHOW BACKENDS\G;
http://IP/backend
4、停止BE
在BE目录下执行 ./bin/stop_be.sh
七、报错提示
1、安装sql客户端
报错:
解决方法:
yum remove -y mysql-libs 卸载 mysql-libs
2、修改MySQL密码:
SET PASSWORD FOR 'root'=PASSWORD('密码');
3、运行BE报错解决方案
Doris 安装还是比较简单,大家跟着文档必然会操作的。