Doris简介
Apache Doris 是一款基于 MPP 架构的高性能、实时的分析型数据库,以高效、简单、统一的特点被人们所熟知,仅需亚秒级响应时间即可返回海量数据下的查询结果,不仅可以支持高并发的点查询场景,也能支持高吞吐的复杂分析场景。
Doris 的使用场景
-
报表分析
-
实时看板(Dashboards)
-
面向企业内部分析师和管理者的报表
-
面向用户或者客户的高并发报表分析(Customer Facing Analytics)。比如面向网站主的站点分析、面向广告主的广告报表,并发通常要求成千上万的 QPS,查询延时要求毫秒级响应。著名的电商公司京东在广告报表中使用 Apache Doris,每天写入 100 亿行数据,查询并发 QPS 上万,99 分位的查询延时 150ms。
-
即席查询(Ad-hoc Query):面向分析师的自助分析,查询模式不固定,要求较高的吞吐。小米公司基于 Doris 构建了增长分析平台(Growing Analytics,GA),利用用户行为数据对业务进行增长分析,平均查询延时 10s,95 分位的查询延时 30s 以内,每天的 SQL 查询量为数万条。
-
湖仓一体(Data Lakehouse):通过外表的方式联邦分析位于 Hive、Iceberg、Hudi 等离线湖仓中的数据,在避免数据拷贝的前提下,查询性能大幅提升。
-
日志检索分析:在 Apache Doris 2.0 版本中,支持了倒排索引和全文检索,能够很好的满足日志检索分析的场景,并且依赖其高效的查询引擎和存储引擎,相比传统的日志检索分析的方案可以有 10 倍性价比的优势。
-
统一数仓构建:一个平台满足统一的数据仓库建设需求,简化繁琐的大数据软件栈。海底捞基于 Apache Doris 构建的统一数仓,替换了原来由 Spark、Hive、Kudu、Hbase、Phoenix 组成的旧架构,架构大大简化。
Doris 的整体架构
- Frontend(FE):主要负责用户请求的接入、查询解析规划、元数据的管理、节点管理相关工作。
- Backend(BE):主要负责数据存储、查询计划的执行。
环境说明
这里搭建测试环境,只安装1个FrontEnd和1个BackEnd即可。
1个FrontEnd意味着没有高可用功能。
1个BackEnd意味着数据只有1份,没有更多的副本。
这里在node2机器上操作。
安装
设置系统
(1)设置系统最大打开文件句柄数(注意这里的*不要去掉)
[hadoop@node2 ~]$ sudo vim /etc/security/limits.conf
末尾添加
* soft nofile 65536 * hard nofile 65536 * soft nproc 65536 * hard nproc 65536
(2)设置最大虚拟块的大小
[hadoop@node2 ~]$ sudo vim /etc/sysctl.conf
末尾添加
vm.max_map_count=2000000
重启生效
[hadoop@node2 ~]$ sudo reboot
下载安装包
根据自己的需要,下载合适的安装包,下载地址:
下载doris
arm64 架构 cpu(apple),选择 arm64 的安装包下载 (苹果电脑)
x86_64架构 cpu(intel,amd),执行命令:
cat /proc/cpuinfo | grep avx2
如果能看到avx2 字样选择带 avx2 的包,否则选择不带 avx2 (一般比较新的电脑都支持avx2)
下载后,上传x64_avx2安装包到Linux
[hadoop@node2 installfile]$ ls ... x64_avx2 [hadoop@node2 installfile]$ cd x64_avx2/ [hadoop@node2 x64_avx2]$ ls apache-doris-be-1.2.4.1-bin-x86_64.tar.xz apache-doris-fe-1.2.4.1-bin-x86_64.tar.xz apache-doris-dependencies-1.2.4.1-bin-x86_64.tar.xz
解压
解压(解压即安装)
[hadoop@node2 x64_avx2]$ mkdir ~/soft/doris 安装fe [hadoop@node2 x64_avx2]$ tar -xvf apache-doris-fe-1.2.4.1-bin-x86_64.tar.xz -C ~/soft/doris/ [hadoop@node2 x64_avx2]$ mv ~/soft/doris/apache-doris-fe-1.2.4.1-bin-x86_64 ~/soft/doris/fe 安装be [hadoop@node2 x64_avx2]$ tar -xvf apache-doris-be-1.2.4.1-bin-x86_64.tar.xz -C ~/soft/doris/ [hadoop@node2 x64_avx2]$ mv ~/soft/doris/apache-doris-be-1.2.4.1-bin-x86_64/ ~/soft/doris/be 安装其他依赖(java udf函数) [hadoop@node2 x64_avx2]$ tar -xvf apache-doris-dependencies-1.2.4.1-bin-x86_64.tar.xz -C ~/soft/doris/ [hadoop@node2 x64_avx2]$ mv ~/soft/doris/apache-doris-dependencies-1.2.4.1-bin-x86_64/ ~/soft/doris/dependencies [hadoop@node2 x64_avx2]$ cd ~/soft/doris/ [hadoop@node2 doris]$ ls be dependencies fe [hadoop@node2 doris]$ cp dependencies/java-udf-jar-with-dependencies.jar be/lib/
注意:解压选项不能加z,否则报错
配置FE
[hadoop@node2 doris]$ vim fe/conf/fe.conf
修改内容如下:
http_port = 7030 # 193是虚拟机的网段,注意根据实际情况修改 priority_networks = 192.168.193.0/24
启动FE
[hadoop@node2 doris]$ ./fe/bin/start_fe.sh --daemon
登录 FE Web页面
node2:7030
用户名:root
密码:无
登录后,看到如下界面
配置BE
[hadoop@node2 doris]$ vim be/conf/be.conf
配置如下内容
webserver_port = 7040 # 如果是多个硬盘可以配置多个存储目录,存储目录要提前创建出来,其中,第二个存储目录特别指定为SSD,存储容量限制是10GB,这里暂时不配做,就用默认的存储目录 # storage_root_path = /home/hadoop/soft/doris/doris-storage1;/home/hadoop/soft/doris/doris-storage2.SSD,10 # 193是虚拟机的网段,注意根据实际情况修改 priority_networks = 192.168.193.0/24 # 添加如下数据 mem_limit=40%
如果计划多台机器安装BE,下一步需要分发BE,这里只安装1台,所以不用分发BE。
添加BE
BE节点需要先在FE中添加,才可加入集群。可以使用mysql-client连接到FE。
如果还没有安装MySQL需要先安装MySQL。可参考:脚本一键安装MySQL8
使用 MySQL客户端连接到 FE
[hadoop@node2 doris]$ mysql -hnode2 -P9030 -uroot
注意:
-
P是大写
-
FE 默认没有密码
-
设置密码:SET PASSWORD FOR 'root' = PASSWORD('aaaaaa');
[hadoop@node2 doris]$ mysql -hnode2 -P9030 -uroot Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 0 Server version: 5.7.99 Doris version doris-1.2.4-1-Unknown Copyright (c) 2000, 2022, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
输出日志可以看到Doris的版本号为5.7.99
添加BE
ALTER SYSTEM ADD BACKEND "node2:9050";
执行过程如下:
mysql> ALTER SYSTEM ADD BACKEND "node2:9050"; Query OK, 0 rows affected (0.05 sec)
如果还有其他BE,修改ALTER SYSTEM ADD BACKEND 命令中的主机,继续命令添加BE
查看BE状态
SHOW PROC '/backends'\G
执行过程
mysql> SHOW PROC '/backends'\G *************************** 1. row *************************** BackendId: 10003 Cluster: default_cluster IP: 192.168.193.142 HostName: node2 HeartbeatPort: 9050 BePort: -1 HttpPort: -1 BrpcPort: -1 LastStartTime: NULL LastHeartbeat: NULL Alive: false SystemDecommissioned: false ClusterDecommissioned: false TabletNum: 0 DataUsedCapacity: 0.000 AvailCapacity: 1.000 B TotalCapacity: 0.000 UsedPct: 0.00 % MaxDiskUsedPct: 0.00 % RemoteUsedCapacity: 0.000 Tag: {"location" : "default"} ErrMsg: java.net.ConnectException: Connection refused (Connection refused) Version: Status: {"lastSuccessReportTabletsTime":"N/A","lastStreamLoadTime":-1,"isQueryDisabled":false,"isLoadDisabled":false} HeartbeatFailureCounter: 28 NodeRole: 1 row in set (0.02 sec) mysql>
看到HostName: node2
,说明node2作为了BE,但是Alive: false
,说明还没有存活,需要启动BE
看到的不是普通的mysql客户端,而是Doriss FE的客户端,和浏览器看到的如下界面功能一样,都能执行SQL
启动BE
[hadoop@node2 doris]$ be/bin/start_be.sh --daemon
查看进程
[hadoop@node2 doris]$ jps 4211 5115 Jps 2559 PaloFe
启动BE后,jps只能看到进程号(例如:4211),因为BE是用C++写的,不是Java进程,所以没有看到进程名称。
查询
mysql> SHOW PROC '/backends'\G *************************** 1. row *************************** BackendId: 10003 Cluster: default_cluster IP: 192.168.193.142 HostName: node2 HeartbeatPort: 9050 BePort: 9060 HttpPort: 7040 BrpcPort: 8060 LastStartTime: 2024-07-07 00:04:41 LastHeartbeat: 2024-07-07 00:10:30 Alive: true SystemDecommissioned: false ClusterDecommissioned: false TabletNum: 0 DataUsedCapacity: 0.000 AvailCapacity: 8.310 GB TotalCapacity: 26.979 GB UsedPct: 69.20 % MaxDiskUsedPct: 69.20 % RemoteUsedCapacity: 0.000 Tag: {"location" : "default"} ErrMsg: Version: doris-1.2.4-1-Unknown Status: {"lastSuccessReportTabletsTime":"2024-07-07 00:10:05","lastStreamLoadTime":-1,"isQueryDisabled":false,"isLoadDisabled":false} HeartbeatFailureCounter: 0 NodeRole: mix 1 row in set (0.01 sec) mysql>
看看到BE为存活状态Alive: true
。
Web UI查看BE
关闭BE
[hadoop@node2 doris]$ be/bin/stop_be.sh waiting be to stop, pid: 4211 stop doris_be, and remove pid file.
关闭FE
[hadoop@node2 doris]$ fe/bin/stop_fe.sh waiting fe to stop, pid: 2559 stop java, and remove pid file.
查看进程
[hadoop@node2 doris]$ jps 5247 Jps
Doris启停脚本
[hadoop@node2 doris]$ vim ~/bin/dor.sh
脚本内容如下:
#!/bin/bash
case $1 in
"start")
for host in node2 ; do
echo "========== 在 $host 上启动 fe ========="
ssh $host "/home/hadoop/soft/doris/fe/bin/start_fe.sh --daemon"
done
for host in node2 ; do
echo "========== 在 $host 上启动 be ========="
ssh $host "/home/hadoop/soft/doris/be/bin/start_be.sh --daemon"
done
;;
"stop")
for host in node2 ; do
echo "========== 在 $host 上停止 be ========="
ssh $host "/home/hadoop/soft/doris/be/bin/stop_be.sh "
done
for host in node2 ; do
echo "========== 在 $host 上停止 fe ========="
ssh $host "/home/hadoop/soft/doris/fe/bin/stop_fe.sh "
done
;;
*)
echo "参数错误"
echo " start 启动doris集群"
echo " stop 停止stop集群"
;;
esac
添加执行权限
[hadoop@node2 doris]$ chmod u+x ~/bin/dor.sh
脚本启动doris
[hadoop@node2 doris]$ dor.sh start ========== 在 node2 上启动 fe ========= ========== 在 node2 上启动 be ========= [hadoop@node2 doris]$ jps 3200 Jps 2300 PaloFe 2797
脚本关闭doris
[hadoop@node2 doris]$ dor.sh stop ========== 在 node2 上停止 be ========= waiting be to stop, pid: 2797 stop doris_be, and remove pid file. ========== 在 node2 上停止 fe ========= waiting fe to stop, pid: 2300 stop java, and remove pid file. [hadoop@node2 doris]$ jps 4006 Jps
注意:
关闭Doris集群的顺序建议是先关闭所有be节点,再关闭observer fe节点,最后是Leader fe节点。
如果先关闭fe,再关闭be,会出现be关闭不了,同时mysql服务会被关掉,进不了mysql客户端,提示如下错误
[hadoop@node2 doris]$ mysql -uroot -p000000 mysql: [Warning] Using a password on the command line interface can be insecure. ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)
至此,Doris的测试环境搭建完成!深入了解Doris,可以查看官网文档。
完成!enjoy it!