Doris 介绍
Apache Doris 是一个基于MPP架构的 高性能、实时的分析型数据库 。最早是诞生于百度广告报表业务的 Palo 项目,2017 年正式对外开源 , 2022 年 6 月,Apache Doris成为 Apache 顶级项目(Top-Level Project,TLP) 。
其使用场景主要有以下:
报表分析
实时看板 (Dashboards)
面向企业内部分析师和管理者的报表
面向用户或者客户的高并发报表分析(Customer Facing Analytics)。
即席查询(Ad-hoc Query):面向分析师的自助分析,查询模式不固定,要求较高的吞吐。
统一数仓构建 :一个平台满足统一的数据仓库建设需求,简化繁琐的大数据软件栈。海底捞基于 Doris 构建的统一数仓,替换了原来由 Spark、Hive、Kudu、Hbase、Phoenix 组成的旧架构,架构大大简化。
数据湖联邦查询:通过外表的方式联邦分析位于 Hive、Iceberg、Hudi 中的数据,在避免数据拷贝的前提下,查询性能大幅提升。
Doris整体架构只有两类进程
Frontend(FE),主要负责用户请求的接入、查询解析规划、元数据的管理、节点管理相关工作。
Backend(BE),主要负责数据存储、查询计划的执行。
主要特性如下:
列式存储
采用 MySQL 协议,高度兼容 MySQL 语法
支持多种索引和存储模型
支持强一致的物化视图,物化视图的更新和选择都在系统内自动进行
支持多个大表的分布式 Shuffle Join
向量化的查询引擎 , 在宽表聚合场景下性能是非向量化引擎的 5-10 倍
安装过程
参考官方文档:https://doris.apache.org/zh-CN/docs/dev/install/install-deploy
安装规划
主机名 | 设备IP | 服务组件 | 安装目录 |
---|---|---|---|
host01 | 192.168.5.51 | FE | /fe/dorisdata/ |
host02 | 192.168.5.52 | FE | /fe/dorisdata/ |
host03 | 192.168.5.53 | FE | /fe/dorisdata/ |
host04 | 192.168.5.54 | BE | /data/dorisdata/ |
host05 | 192.168.5.55 | BE | /data/dorisdata/ |
host06 | 192.168.5.56 | BE | /data/dorisdata/ |
host07 | 192.168.5.57 | BE | /data/dorisdata/ |
创建doris用户
useradd doris
echo doris@2023| passwd doris --stdin复制
java环境
已安装
[root@host02 ~]# java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)复制
安装FE
[root@host02 opt/doris]# tar -xvf apache-doris-fe-1.2.1-bin-x86_64.tar.xz
[root@host02 opt/doris]# mv apache-doris-fe-1.2.1-bin-x86_64 usr/local/doris
[root@host02 opt/doris]# cd usr/local/doris复制
目录赋权
[root@host02 ~]# chown -R doris:doris usr/local/doris
[root@host02 ~]# mkdir fe/dorisdata/
[root@host02 ~]# chown -R doris:doris fe/dorisdata复制
添加doris用户环境变量
[root@host02 usr/local/doris/fe/conf]# su - doris
cat >> ~/.bashrc <<EOF
FE_HOME=/usr/local/doris/apache-doris-fe-1.2.1-bin-x86_64
export PATH=\$FE_HOME/bin:\$PATH
EOF
[doris@host02 ~]$ source .bashrc复制
fe配置文件
修改元数据存储路径meta_dir
[doris@host02 ~]$ cat $FE_HOME/conf/fe.conf |grep -v ^#|grep -v ^$
LOG_DIR = ${DORIS_HOME}/log
DATE = `date +%Y%m%d-%H%M%S`
JAVA_OPTS="-Xmx8192m -XX:+UseMembar -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -Xloggc:$DORIS_HOME/log/fe.gc.log.$DATE"
JAVA_OPTS_FOR_JDK_9="-Xmx8192m -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -Xlog:gc*:$DORIS_HOME/log/fe.gc.log.$DATE:time"
sys_log_level = INFO
http_port = 8030
rpc_port = 9020
query_port = 9030
edit_log_port = 9010
mysql_service_nio_enabled = true
#add
meta_dir = fe/dorisdata/复制
启动fe
start_fe.sh --daemon复制
查询fe运行状态
[root@host02 ~]# curl http://127.0.0.1:8030/api/bootstrap
{"msg":"success","code":0,"data":{"replayedJournalId":0,"queryPort":0,"rpcPort":0,"version":""},"count":0}复制
使用mysql客户端连接fe
[root@host02 ~]# mysql -uroot -P9030 -h127.0.0.1
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 0
Server version: 5.7.37 Doris version doris-1.2.1-rc01-Unknown
Copyright (c) 2000, 2021, 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.
10:16:12 (root@127.0.0.1) [(none)]>复制
FE扩容
同样方式安装fe,但不执行启动命令,因为第一次启动命令会不一样
第一次以加入已有的fe方式启动
[doris@host03 ~]$ start_fe.sh --helper 192.168.5.52:9010 --daemon复制
连接已有fe,执行添加fe命令
mysql -uroot -P9030 -h192.168.5.52 -proot
MySQL [(none)]> ALTER SYSTEM ADD FOLLOWER "192.168.5.53:9010";复制
日志查看,扩容失败,因为host03有两个ip,官方说这种会有问题扩容不了,如果扩容fe服务器上只有一个ip,经过实践是可以成功扩容的。
[root@host03 log]# tail -100f usr/local/doris/apache-doris-fe-1.2.1-bin-x86_64/log/fe.log
2023-03-23 11:08:42,980 WARN (main|1) [Env.getFeNodeTypeAndNameFromHelpers():1140] frontend 192.168.5.50:9010 is not added to cluster yet. role UNKNOWN复制
安装BE
[root@host04 doris]# tar -xvf apache-doris-be-1.2.1-bin-x86_64.tar.xz
[root@host04 doris]# tar -xvf apache-doris-dependencies-1.2.1-bin-x86_64.tar.xz
[root@host04 doris]# mv apache-doris-dependencies-1.2.1-bin-x86_64/* apache-doris-be-1.2.1-bin-x86_64/lib/
[root@host04 doris]# mv apache-doris-be-1.2.1-bin-x86_64 usr/local/doris复制
修改目录权限
chown -R doris:doris usr/local/doris
mkdir data/dorisdata/storage
chown -R doris:doris data/dorisdata复制
添加doris用户环境变量
[root@host04 ~]# su - doris
cat >> ~/.bashrc <<EOF
BE_HOME=/usr/local/doris/apache-doris-be-1.2.1-bin-x86_64
export PATH=\$BE_HOME/bin:\$PATH
EOF
[doris@host02 ~]$ source .bashrc复制
be配置文件
指定数据存储目录storage_root_path,并限定5000GB大小
[doris@host04 ~]$ cat $BE_HOME/conf/be.conf |grep -v ^#|grep -v ^$
PPROF_TMPDIR="$DORIS_HOME/log/"
sys_log_level = INFO
be_port = 9060
webserver_port = 8040
heartbeat_service_port = 9050
brpc_port = 8060
#add
storage_root_path = data/dorisdata/storage,5000复制
启动BE
需要调整文件句柄数
sysctl -w vm.max_map_count=2000000
[doris@host04 ~]$ start_be.sh --daemon复制
host05 - host07服务器同以上操作
添加BE到集群(BE扩容)
连接FE,使用命令添加
[doris@host02 fe/dorisdata]$ mysql -uroot -P9030 -h192.168.5.52
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.37 Doris version doris-1.2.1-rc01-Unknown
mysql> ALTER SYSTEM ADD BACKEND "192.168.5.54:9050";
Query OK, 0 rows affected (0.05 sec)
mysql> show backends \G
*************************** 1. row ***************************
BackendId: 10003
Cluster: default_cluster
IP: 192.168.5.54
HeartbeatPort: 9050
BePort: 9060
HttpPort: 8040
BrpcPort: 8060
LastStartTime: 2023-02-01 10:55:22
LastHeartbeat: 2023-02-01 10:57:33
Alive: true
SystemDecommissioned: false
ClusterDecommissioned: false
TabletNum: 0
DataUsedCapacity: 0.000
AvailCapacity: 17.461 TB
TotalCapacity: 19.637 TB
UsedPct: 11.08 %
MaxDiskUsedPct: 11.08 %
RemoteUsedCapacity: 0.000
Tag: {"location" : "default"}
ErrMsg:
Version: doris-1.2.1-rc01-Unknown
Status: {"lastSuccessReportTabletsTime":"2023-02-01 10:57:06","lastStreamLoadTime":-1,"isQueryDisabled":false,"isLoadDisabled":false}
HeartbeatFailureCounter: 0
NodeRole: mix
1 row in set (0.00 sec)复制
host05 - host07服务器同以上操作
至此doris安装完成,其中BE和FE需要的端口列表如下:
实例名称 | 端口名称 | 默认端口 | 通讯方向 | 说明 |
---|---|---|---|---|
BE | be_port | 9060 | FE --> BE | BE 上 thrift server 的端口,用于接收来自 FE 的请求 |
BE | webserver_port | 8040 | BE <--> BE | BE 上的 http server 的端口 |
BE | heartbeat_service_port | 9050 | FE --> BE | BE 上心跳服务端口(thrift),用于接收来自 FE 的心跳 |
BE | brpc_port | 8060 | FE <--> BE, BE <--> BE | BE 上的 brpc 端口,用于 BE 之间通讯 |
FE | http_port | 8030 | FE <--> FE,用户 <--> FE | FE 上的 http server 端口 |
FE | rpc_port | 9020 | BE --> FE, FE <--> FE | FE 上的 thrift server 端口,每个fe的配置需要保持一致 |
FE | query_port | 9030 | 用户 <--> FE | FE 上的 mysql server 端口 |
FE | edit_log_port | 9010 | FE <--> FE | FE 上的 bdbje 之间通信用的端口 |
Broker | broker_ipc_port | 8000 | FE --> Broker, BE --> Broker | Broker 上的 thrift server,用于接收请求 |
注:
当部署多个 FE 实例时,要保证 FE 的 http_port 配置相同。
部署前请确保各个端口在应有方向上的访问权限。
评论
