Doris概述
1. Doris简介
2. Doris核心特点
基于MPP(大规模并行处理)架构的分析型数据库 性能卓越,PB级别数据毫秒/秒级响应 支持标准SQL语言,兼容MySQL协议 向量化执行器 高效的聚合表技术 新型预聚合技术Rollup 高性能、高可用、高可靠 极简运维,弹性伸缩
3. Doris发展历程

4. 对比其他的数据分析框架
OLTP 与 OLAP OLTP是 Online Transaction Processing 的简称;OLAP 是 OnLine Analytical Processing 的简称。 OLTP的查询一般只会访问少量的记录,且大多时候都会利用索引。比如最常见的基于主键的 CRUD 操作。 OLAP 的查询一般需要 Scan 大量数据,大多时候只访问部分列,聚合的需求(Sum,Count,Max,Min 等)会多于明细的需求(查询原始的明细数据)。
HTAP HTAP 是 Hybrid Transactional(混合事务)/Analytical Processing(分析处理)的简称。 基于创新的计算存储框架,HTAP 数据库能够在一份数据上同时支撑业务系统运行和 OLAP 场景,避免在传统架构中,在线与离线数据库之间大量的数据交互。此外,HTAP 基于分布式架构,支持弹性扩容,可按需扩展吞吐或存储,轻松应对高并发、海量数据场景。 目前,实现 HTAP 的数据库不多,主要有 PingCAP 的 TiDB、阿里云的 HybridDB for MySQL、百度的 BaikalDB 等。其中,TiDB 是国内首家开源的 HTAP 分布式数据库。
OLAP分类:
MOLAP:通过预计算,提供稳定的切片数据,实现多次查询一次计算,减轻了查询时的计算压力,保证了查询的稳定性,是“空间换时间”的最佳路径。实现了基于Bitmap的去重算法,支持在不同维度下去重指标的实时统计,效率较高。 ROLAP:基于实时的大规模并行计算,对集群的要求较高。MPP引擎的核心是通过将数据分散,以实现CPU、IO、内存资源的分布,来提升并行计算能力。在当前数据存储以磁盘为主的情况下,数据Scan需要的较大的磁盘IO,以及并行导致的高CPU,仍然是资源的短板。 因此,高频的大规模汇总统计,并发能力将面临较大挑战,这取决于集群硬件方面的并行计算能力。传统去重算法需要大量计算资源,实时的大规模去重指标对CPU、内存都是一个巨大挑战。目前Doris最新版本已经支持Bitmap算法,配合预计算可以很好地解决去重应用场景。
doris是一个ROLAP引擎, 可以满足以下需求:
灵活多维分析; 明细+聚合; 主键更新。

Doris 原理
1. 名称解释

2. 整体架构


Doris的架构很简洁,使用MySQL协议,用户可以使用任何MySQL ODBC/JDBC和MySQL客户端直接访问Doris,只设FE(Frontend)、BE(Backend)两种角色、两个进程,不依赖于外部组件,方便部署和运维。
FE:Frontend,即 Doris 的前端节点。主要负责接收和返回客户端请求、元数据以及集群管理、查询计划生成等工作 BE:Backend,即 Doris 的后端节点。主要负责数据存储与管理、查询计划执行等工作。
数据的可靠性由BE保证,BE会对整个数据存储多副本或者是三副本。副本数可根据需求动态调整。
Doris编译
使用 Docker 开发镜像编译(推荐)
step1 拉取Doris官方提供的Docker镜像,目前可用版本有:build-env、build-env-1.1、build-env-1.2
docker pull apachedoris/doris-dev:build-env-1.2
step2 查看 Docker 镜像
docker images

step3 运行镜像
将容器中的 maven 下载的包保存到宿主机本地指定的文件中,避免重复下载,同时会将编译的 Doris 文件保存到宿主机本地指定的文件,方便部署。
docker run -it \
-v u01/.m2:/root/.m2 \
-v u01/incubator-doris-DORIS-0.13-release/:/root/incubator-doris-DORIS-0.13-release/ \
apachedoris/doris-dev:build-env-1.2
开启之后, 就在容器内了。
tar -zxvf apache-doris-0.13.0.0-incubating-src.tar.gz
cd apache-doris-0.13.0.0-incubating-src
sh build.sh
编译完成。
Doris安装部署
1. 软硬件需求
Linux 操作系统版本需求:
软件需求:
开发测试环境:
生产环境:
FE 的磁盘空间主要用于存储元数据,包括日志和 image。通常从几百 MB 到几个 GB 不等。 BE 的磁盘空间主要用于存放用户数据,总磁盘空间按用户总数据量 * 3(3副本)计算,然后再预留额外 40% 的空间用作后台 compaction 以及一些中间数据的存放。 一台机器上可以部署多个 BE 实例,但是只能部署一个 FE。如果需要 3 副本数据,那么至少需要 3 台机器各部署一个 BE 实例(而不是1台机器部署3个BE实例)。多个FE所在服务器的时钟必须保持一致(允许最多5秒的时钟偏差) 测试环境也可以仅适用一个 BE 进行测试。实际生产环境,BE 实例数量直接决定了整体查询延迟。 所有部署节点关闭 Swap。
注意点二: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。
网络需求:
Doris 各个实例直接通过网络进行通讯。以下表格展示了所有需要的端口。
2. Doris端口说明

3. 资源规划
4. 启动FE
4.1 配置环境变量

vim /etc/profile
#DORIS_HOME
export DORIS_HOME=/export/server/apache-doris-0.13.0
export PATH=:$DORIS_HOME/bin:$PATH

3)重新加载环境变量
source /etc/profile
4.2 创建doris-mate
mkdir -p /export/server/apache-doris-0.13.0/fe/doris-meta

vim conf/fe.conf
meta_dir = /export/server/apache-doris-0.13.0/fe/doris-meta

4.3 修改fe.conf中的JAVA_OPTS

4.4 修改ip绑定(可选)
vim /export/server/apache-doris-0.13.0/fe/conf/fe.conf
priority_networks = ip/24

4.5 将安装目录分发到另外两台节点
4.6 启动FE
sh /export/server/apache-doris-0.13.0/fe/bin/start_fe.sh --daemon
5. 配置BE
将源码编译生成的 output 下的 be 文件夹拷贝到 BE 的节点/export/server/apache-doris-0.13.0路径下:

配置文件为 be/conf/be.conf。主要是配置 storage_root_path:数据存放目录。默认在be/storage下,需要手动创建该目录。多个路径之间使用 ; 分隔(最后一个目录后不要加 ;)
mkdir -p /export/server/apache-doris-0.13.0/be/storage1 /export/server/apache-doris-0.13.0/be/storage2

vim conf/be.conf
storage_root_path = /export/server/apache-doris-0.13.0/be/storage1,10;/export/server/apache-doris-0.13.0/be/storage2

5.1 使用mysql连接
step1 删除操作系统自带的mysql库文件(node1)
rpm -qa | grep mariadb
rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64

step2 安装mysql-client
上传”资料\软件\mysql-client”目录下的rpm到服务器节点/export/server/mysql-client.

step3 进行安装

rpm -ivh *

step4 连接node1服务器上的mysql实例(默认端口9030,默认没有密码)
mysql -uroot -h node1 -P 9030

step5 登陆后,可以通过以下命令修改 root 密码
SET PASSWORD FOR 'root' = PASSWORD('123456');

step6 使用Navicat客户端登录
5.2 添加BE
step1 BE 节点需要先在 FE 中添加,才可加入集群(node1)
mysql -uroot -h node1 -P 9030 -p
输入密码:123456
step2 登录后添加BE节点port为be上的heartbeat_service_port端口,默认9050
ALTER SYSTEM ADD BACKEND "node1:9050";
ALTER SYSTEM ADD BACKEND "node2:9050";
ALTER SYSTEM ADD BACKEND "node3:9050";

step3 查看BE状态,alive必须为true
SHOW PROC '/backends';

查看 BE 运行情况。如一切正常,isAlive 列应为 true。
5.3 修改可打开文件数
ulimit -n 65535
vim /export/server/apache-doris-0.13.0/be/conf/be.conf
priority_networks = ip/24

5.5 将安装目录分发到另外两台节点
5.6 启动BE
sh /export/server/apache-doris-0.13.0/be/bin/start_be.sh --daemon
show proc '/frontends';

show proc '/backends';

通过前端界面访问FE:



本文作者:熊静波(上海新炬王翦团队)
本文来源:“IT那活儿”公众号





