Apache Doris介绍
Apache Doris 是一个基于 MPP 架构的高性能、实时的分析型数据库,以极速易用的特点被人们所熟知,仅需亚秒级响应时间即可返回海量数据下的查询结果,不仅可以支持高并发的点查询场景,也能支持高吞吐的复杂分析场景。基于此,Apache Doris 能够较好的满足报表分析、即席查询、统一数仓构建、数据湖联邦查询加速等使用场景,用户可以在此之上构建用户行为分析、AB 实验平台、日志检索分析、用户画像分析、订单分析等应用。
特点: 列示存储、mmp(大规模并行处理)、支持实时数据分析、高度兼容mysql协议、高并发和高通图的Ad-hoc查询、支出聚合+明细数据查询、无外部系统依赖。
底层架构:
Doris =
Google mesa(满足一系列复杂且具有挑战性的用户和系统需求,本身不提供SQL查询引擎)
Apache Lmpala(MPP SQL查询引擎,做更多的查询优化,但缺少较完美的分布式存储引擎)
Apache ORCFile(只访问查询涉及的列,大量降低系统I/O,有利于查询的并发处理)
软硬件需求
Linux操作系统版本需求
|--------|----------|
| CentOS | 7.1及以上 |
| Ubuntu | 16.04及以上 |
软件需求
|------|----------|
| Java | 1.8 |
| GCC | 4.8.2及以上 |
开发测试环境
|----------|-----|-------|----------------|------|-------|
| 模版 | CPU | 内存 | 磁盘 | 网络 | 实例数量 |
| Frontend | 8核+ | 8GB+ | SSD或SATA,10GB+ | 千兆网卡 | 1 |
| Backend | 8核+ | 16GB+ | SSD或SATA,50GB+ | 千兆网卡 | 1-3* |
生产环境
|----------|------|-------|------------------|------|-------|
| 模版 | CPU | 内存 | 磁盘 | 网络 | 实例数量 |
| Frontend | 16核+ | 64GB+ | SSD或RAID卡,100GB+ | 万兆网卡 | 1-3* |
| Backend | 16核+ | 64GB+ | SSD或SATA,100GB+ | 万兆网卡 | 3* |
适用场景
- 报表分析
实时看板;面相企业内部分析师和管理者的报表;面向用户或者客户的高并发报表分析。
- 即席查询
面向分析师的自助分析,查询模式不固定,要求较高的吞吐。
- 统一数仓构建
一个平台满足统一的数据仓库建设需求,简化繁琐的大数据软件栈。
- 数据湖联邦查询
通过外表的方式联邦分析位于 Hive、Iceberg、Hudi 中的数据,在避免数据拷贝的前提下,查询性能大幅提升。
部署
用初始化脚本安装mysql数据库
curl-o online_index.sh https://sc-tools.uniscity.com/linux/script/online_index.sh
bash online_index.sh
安装包下载
#初始化目录
cd /opt
mkdir doris1.2.4
#查看系统CPU型号
uname -a
#下载与系统cpu型号一致的包
wget https://apache-doris-releases.oss-accelerate.aliyuncs.com/apache-doris-2.0.0-bin-x64.tar.gz
#解压
xz -d apache-doris-2.0.0-bin-x64.tar.gz
tar -xvf apache-doris-2.0.0-bin-x64.tar.gz
时钟设置
#同步时间,需要使⽤ ntpdate 命令,如果没有可以使⽤yum安装
yum install ntpdate
#使⽤ntpdate同步⽹络上的时间服务器的时间,例如 : time.windows.com、 ntp.aliyun.com
ntpdate -u ntp.aliyun.com
#可以将时间同步做成⼀个定时任务,每隔⼀段时间就同步⼀下⽹络的时间
crontab -e
* * * * * /usr/sbin/ntpdate -u ntp.aliyun.com #输入然后wq保存退出
#查看crontab运行情况
crontab -l
tail -n 5 /var/log/cron
打开文件limits.conf
sudo vim /etc/security/limits.conf
在文件的末尾处添加或者修改
* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536
打开文件sysctl.conf
sudo vim /etc/sysctl.conf
# 添加
fs.file-max = 6553560
vm.max_map_count=2000000
FE配置
vim fe/conf/fe.conf
#只需要修改priority_networks
priority_networks = 10.0.53.161/24
BE配置
vim be/conf/be.conf
#需要修改JAVA_HOME和priority_networks即可
JAVA_HOME=/usr/local/java/jdk1.8.0_361/
priority_networks = 10.0.53.161/24
初始化
#启动fe
sh fe/bin/start_fe.sh --daemon
#启动be
sh be/bin/start_be.sh --daemon
#添加be到集群
alter system add backend "192.168.31.81:9050";
#查看be状态
show PROC '/backends';
#查看fe状态
show frontends\G;
FE Web 登录页面
访问地址: http://localhost:8030/login
初始用户: root
密码:无


Doris的数据模型
Doris的数据模型主要分为3类:
- Aggregate
- Unique
- Duplicate
Aggregate模型
适用于有固定模式的报表类查询场景。
表中的列按照是否设置AggregationType分为key(维度列)和Value(指标列)。没有设置AggregationType的称为Key,设置了AggregationType的称为Value。
导入数据时,Key列完全相同的行会聚合成一行,其Value列按照设置的AggregationType进行聚合。
AggregationType目前有以下方式:
- SUM:求和,多行的Value累加。
- REPLACE:替代,下一批数据的Value会替换之前导入的行中的Value。
- MAx:保留最大值。
- MIN:保留最小值。
在建表语句后添加以下语句声明Key列:
AGGREGATE KEY();
Unique模型
适用于需要保证主键唯一性的多维分析场景。
读时合并
Unique的读时合并可以用聚合模型中的REPLACE方式替代。
写时合并
Unique的写时合并不同于聚合模式的读时合并,其通过在写入时做额外的工作,实现了最优的查询性能。
在建表语句后添加以下语句声明唯一主键和写时合并:
UNIQUE KEY()
PROPERTIES (
"replication_allocation" = "tag.location.default: 1",
"enable_unique_key_merge_on_write" = "true"
);
Duplicate模型
适用于任意维度的Ad-hoc查询,不受聚合模型的约束。
区别于上述2种模型,Duplicate模型的数据完全按照导入文件中的数据进行存储,不进行任何聚合。
在建表语句后添加以下语句声明排序依赖的键值:
DUPLICATE KEY();
当创建表的时候没有指定Unique、Aggregate或Duplicate时,会默认创建一个Duplicate模型的表,并自动指定排序列。
如果不需要排序时可以在表属性配置中添加如下语句:
PROPERTIES (
"enable_duplicate_without_keys_by_default" = "true"
);