编者荐语:
一篇快速简洁的安装部署文章喔
以下文章来源于Apache Doris 补习班 ,作者苏奕嘉
[
Apache Doris 补习班 .
Apache Doris Active Contributor 和 SelectDB SA 来做的不定时更新,主打 Apache Doris 系列学习文章和相关信息、原理解析或者新特性使用教程,争取 All In 原创,欢迎投稿~
](#)
文章说明
本篇只做简洁的 Apache Doris 部署流程介绍,不做过多的 Doris 特性和细节参数介绍,只专注于如何快速部署和启动以及测试使用。
和官网最大的区别在于只需跟着步骤走,不需要关注太多额外的东西,其他额外的参数也好、原理也罢,都会在后续文章或者官网文档里进行详尽说明~
后续【Apache Doris 补习班】公众号的文章风格皆为如此,标题讲什么,就会简明扼要的说清楚是什么、怎样做,尽可能减少大家阅读压力,短篇幅也能得到大收获。
架构简介
Apache Doris 是一款 MPP 架构的实时数据仓库,已全面实现向量化引擎。
在架构上:
- 1. 只有两个进程,FE(Frontend)和 BE(Backend),且两个进程皆独立运行
- 2. 不需要除 JDK 环境以外的任何三方组件依赖
其中,FE 负责元数据存储、查询语法解析、查询任务下发以及对外交互,BE 负责实际数据存储、执行计算
在部署上:
- 1. 可以从单节点 1FE + 1BE 起步部署,支持极简水平扩缩容,扩缩容皆会自动 reblance,无需人工干预
- 2. 从系统角度,当前支持 Linux OS、Windows WLS2环境编译和部署,支持 MacOS 编译和 Docker 部署,暂不支持裸机部署
- 3. 从介质角度,当前支持裸机部署、虚机部署、Docker部署,后续支持 K8S 部署。
在环境上:
- 1. CentOS 系统需 7.1 及以上,Ubuntu 系统需要 16.04 及以上
- 2. JDK 建议使用 1.8,GCC 需要 4.8.2 及以上
部署步骤
部署以 linux 系统为例,分为裸机/虚机部署和 Docker 部署。
其中需要注意的是,生产只建议使用裸机/虚机部署,当前版本不建议使用 Docker 部署生产环境!
裸机/虚机部署
注意事项
- 1. FE 节点推荐 8C16G 机器部署,BE 节点最低推荐 8C32G 机器部署
- 2. FE 节点核存比推荐 1:2,BE 节点核存比推荐 1:4
- 3. 如果单节点内存大于等于128G,可以混部(节点上即部署 FE 也部署 BE),若小于该值,建议独立部署(单节点上只部署 FE 或者 BE)
部署前置工作
- 1. 设置系统最大打开文件句柄数
vi /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
重启机器使其生效,或者执行以下命令让当前临时生效
ulimit -n 65535
- 1. 调整时钟同步Doris 的元数据要求时间精度要小于 5000 ms,所以所有集群所有机器要进行时钟同步
- 2. 调整机器
max_map_conut
值
sysctl -w vm.max_map_count=2000000
- 1. 确保剩余空间大于 5GB
df -H
部署流程
- 1. 查看当前系统架构及 CPU 指令集
uname -a
cat /proc/cpuinfo | grep avx2
根据第一条命令的返回值确定是 X86\_64 机器还是 ARM(Aarch)机器。
如果是 X86\_64 的机器,根据第二条命令是否有返回值确定是否有 AVX2 指令集,有返回值则为支持 AVX2 指令集的 CPU,反之亦然。
- 1. 如果是 ARM(Aarch)架构,则选择 ARM64 版本下载,如果是 X86\_64 架构,则根据有无 AVX2 指令集选择相应的包进行下载
2. 下载方式有两种,网络状态较好的情况下可以用 shell 脚本一键下载,网络状态不好的情况下使用下载链接的方式进行下载,3个二进制包都需要下载
- 3. 下载完成后,需要将
apache-doris-dependencies
包的java-udf-jar-with-dependencies.jar
放到be/lib
目录下
mv java-udf-jar-with-dependencies.jar ${DORIS_HOME}/be/lib
- 1. 修改
fe.conf
和be.conf
中的priority_networks
参数
# 先查看当前节点的内网 IP
ip addr 或者 ifconfig
# 修改 priority_networks
vim fe.conf 或者 be.conf
priority_networks=当前内网IP/32
- 1. 启动 FE 和 BE
sh {$DORIS_HOME}/fe/bin/start_fe.sh --daemon
sh {$DORIS_HOME}/be/bin/start_be.sh --daemon
如要完成高可用 FE 搭建,建议 1Follower 1Observer,或者 3Follower。
其中 Follower 角色提供读和写能力,Observer 只提供对外读的能力。
注意!!Follower 角色由于要进行选举,所以角色数量必须为奇数个!!!
除去刚刚启动的 FE 默认为 Follower(Master) 外,其他 Observer 或者 Follower 启动都需要遵循以下命令
# master_fe_ip 为第一台启动的 FE 节点的内网 IP 地址
sh {$DORIS_HOME}/fe/bin/start_fe.sh --helper "master_fe_ip:9010" --daemon
- 1. 注册非 Master FE 节点至 Master【若只有一个 FE 可跳过】可以使用 MySQL-Client、Navicat、Dbeaver 等数据库终端软件连接 Doris 集群,连接方式与连接 MySQL 方式一致,端口从 3306 改为 9030 即可以 MySQL-Client 为例
mysql -uroot -P9030 -h127.0.0.1
注册 Follower 角色
alter system add follower "需要添加的 FE 节点内网 IP:9010";
注册 Observer 角色
alter system add observer "需要添加的 FE 节点内网 IP:9010";
- 1. 注册 Backend以 MySQL-Client 为例
mysql -uroot -P9030 -h127.0.0.1
注册
alter system add backend "be_ip:9050";
校验
校验是否注册成功
show frontends;
show backends;
查看所有的 FE/BE 节点 alive
状态是否为 true
,如果为 true
则表示注册成功。
Docker 部署
注意事项
Docker 部署当前不可以用于生产环境!
Docker 部署适用于个人/组织学习、调试BUG、测试功能等场景
部署前置工作
安装好 Docker 环境以及 Docker-compose 环境
- • Docker:20.0+
- • Docker-Compose:2.10+
执行以下命令完成 max_map_count
参数调整:
sysctl -w vm.max_map_count=2000000
部署流程
本篇以 1FE 1BE
为例部署,使用平台为 X86_64
平台
在 2.0 版本开始,我将会更新官方镜像,支持 hostname
配置寻址,同时解决 K8S
部署问题
最近有点忙,预计 6-15 以前搞定~
Docker 部署
- 1. 创建子网网桥
docker network create --driver bridge --subnet=172.20.80.0/24 doris-network
- 1. 执行命令
docker run -itd \
--name=fe \
--env FE_SERVERS="fe1:172.20.80.2:9010" \
--env FE_ID=1 \
-p 8030:8030 \
-p 9030:9030 \
-v /data/fe/doris-meta:/opt/apache-doris/fe/doris-meta \
-v /data/fe/log:/opt/apache-doris/fe/log \
--network=doris-network \
--ip=172.20.80.2 \
apache/doris:1.2.2-fe-x86_64
docker run -itd \
--name=be \
--env FE_SERVERS="fe1:172.20.80.2:9010" \
--env BE_ADDR="172.20.80.3:9050" \
-p 8040:8040 \
-v /data/be/storage:/opt/apache-doris/be/storage \
-v /data/be/log:/opt/apache-doris/be/log \
--network=doris-network \
--ip=172.20.80.3 \
apache/doris:1.2.2-be-x86_64
Docker-Compose 部署
- 1. 创建
docker-compose.yaml
version: '3'
services:
docker-fe:
image: "apache/doris:1.2.2-fe-x86_64"
container_name: "doris-fe"
hostname: "fe"
environment:
- FE_SERVERS=fe1:172.20.81.2:9010
- FE_ID=1
ports:
- 8030:8030
- 9030:9030
volumes:
- /data/fe/doris-meta:/opt/apache-doris/fe/doris-meta
- /data/fe/log:/opt/apache-doris/fe/log
networks:
doris_net:
ipv4_address: 172.20.81.2
docker-be:
image: "apache/doris:1.2.2-be-x86_64"
container_name: "doris-be"
hostname: "be"
depends_on:
- docker-fe
environment:
- FE_SERVERS=fe1:172.20.80.2:9010
- BE_ADDR=172.20.81.3:9050
ports:
- 8040:8040
volumes:
- /data/be/storage:/opt/apache-doris/be/storage
- /data/be/script:/docker-entrypoint-initdb.d
- /data/be/log:/opt/apache-doris/be/log
networks:
doris_net:
ipv4_address: 172.20.81.3
networks:
doris_net:
ipam:
config:
- subnet: 172.20.81.0/24
- 1. 执行命令
docker-compose up -d
校验
- 1. 查看容器是否成功创建,创建以后状态是否 RUNNING
# docker run 部署
docker ps -a
# docker-compose 部署
docker-compose ps -a
- 1. 使用 MySQL-Client 连接 FE
# docker run 部署
mysql -uroot -P9030 -h172.20.80.2
# docker-compose 部署
mysql -uroot -P9030 -h172.20.81.2
- 1. 查看
Backend
状态
show backends
快速使用
再次强调一下,连接 Doris 只需要支持 MySQL 的客户端,无需 MySQL 的服务端,这个客户端可以是 MySQL-Client 黑窗口,可以是 Navicat、Dbeaver 之类的 GUI 可视化工具,也可以是通过 JDBC-MySQL 协议通过代码进行连接,不需要再安装一个 MySQL-Server!!!
连接 Doris
mysql -uroot -P9030 -h127.0.0.1
- • -u:当前登录用户名
- • -P:访问 Doris 时的 MySQL 协议通讯端口
- • -h:要访问的 Doris-FE 节点机器的 IP 地址
- • -p:不需要填写,默认密码为空,这个参数无需填写
创建数据表
- 1. 创建一个数据库
create database demo;
- 1. 创建数据表
use demo;
CREATE TABLE IF NOT EXISTS demo.example_tbl
(
`user_id` LARGEINT NOT NULL COMMENT "用户id",
`date` DATE NOT NULL COMMENT "数据灌入日期时间",
`city` VARCHAR(20) COMMENT "用户所在城市",
`age` SMALLINT COMMENT "用户年龄",
`sex` TINYINT COMMENT "用户性别",
`last_visit_date` DATETIME REPLACE DEFAULT "1970-01-01 00:00:00" COMMENT "用户最后一次访问时间",
`cost` BIGINT SUM DEFAULT "0" COMMENT "用户总消费",
`max_dwell_time` INT MAX DEFAULT "0" COMMENT "用户最大停留时间",
`min_dwell_time` INT MIN DEFAULT "99999" COMMENT "用户最小停留时间"
)
AGGREGATE KEY(`user_id`, `date`, `city`, `age`, `sex`)
DISTRIBUTED BY HASH(`user_id`) BUCKETS 1
PROPERTIES (
"replication_allocation" = "tag.location.default: 1"
);
- 1. 示例数据
10000,2017-10-01,北京,20,0,2017-10-01 06:00:00,20,10,10
10000,2017-10-01,北京,20,0,2017-10-01 07:00:00,15,2,2
10001,2017-10-01,北京,30,1,2017-10-01 17:05:45,2,22,22
10002,2017-10-02,上海,20,1,2017-10-02 12:59:12,200,5,5
10003,2017-10-02,广州,32,0,2017-10-02 11:20:00,30,11,11
10004,2017-10-01,深圳,35,0,2017-10-01 10:00:15,100,3,3
10004,2017-10-03,深圳,35,0,2017-10-03 10:20:22,11,6,6
将上面的数据保存在test.csv
文件中。
- 1. 导入数据
这里我们通过Stream load 方式将上面保存到文件中的数据导入到我们刚才创建的表里。
curl --location-trusted -u root: -T test.csv -H "column_separator:," http://127.0.0.1:8030/api/demo/example_tbl/_stream_load
- • -T test.csv : 这里使我们刚才保存的数据文件,如果路径不一样,请指定完整路径
- • -u root : 这里是用户名密码,我们使用默认用户root,密码是空
- • 127.0.0.1:8030 : 分别是 fe 的 ip 和 http\_port
执行成功之后我们可以看到下面的返回信息
{
"TxnId": 30303,
"Label": "8690a5c7-a493-48fc-b274-1bb7cd656f25",
"TwoPhaseCommit": "false",
"Status": "Success",
"Message": "OK",
"NumberTotalRows": 7,
"NumberLoadedRows": 7,
"NumberFilteredRows": 0,
"NumberUnselectedRows": 0,
"LoadBytes": 399,
"LoadTimeMs": 381,
"BeginTxnTimeMs": 3,
"StreamLoadPutTimeMs": 5,
"ReadDataTimeMs": 0,
"WriteDataTimeMs": 191,
"CommitAndPublishTimeMs": 175
}
- •
NumberLoadedRows
: 表示已经导入的数据记录数 - •
NumberTotalRows
: 表示要导入的总数据量 - •
Status
:Success 表示导入成功
到这里我们已经完成的数据导入,下面就可以根据我们自己的需求对数据进行查询分析了。
查询数据
我们上面完成了建表,输数据导入,下面我们就可以体验 Doris 的数据快速查询分析能力。
mysql> select * from example_tbl;
+---------+------------+--------+------+------+---------------------+------+----------------+----------------+
| user_id | date | city | age | sex | last_visit_date | cost | max_dwell_time | min_dwell_time |
+---------+------------+--------+------+------+---------------------+------+----------------+----------------+
| 10000 | 2017-10-01 | 北京 | 20 | 0 | 2017-10-01 07:00:00 | 35 | 10 | 2 |
| 10001 | 2017-10-01 | 北京 | 30 | 1 | 2017-10-01 17:05:45 | 2 | 22 | 22 |
| 10002 | 2017-10-02 | 上海 | 20 | 1 | 2017-10-02 12:59:12 | 200 | 5 | 5 |
| 10003 | 2017-10-02 | 广州 | 32 | 0 | 2017-10-02 11:20:00 | 30 | 11 | 11 |
| 10004 | 2017-10-01 | 深圳 | 35 | 0 | 2017-10-01 10:00:15 | 100 | 3 | 3 |
| 10004 | 2017-10-03 | 深圳 | 35 | 0 | 2017-10-03 10:20:22 | 11 | 6 | 6 |
+---------+------------+--------+------+------+---------------------+------+----------------+----------------+
6 rows in set (0.02 sec)
mysql> select * from example_tbl where city='上海';
+---------+------------+--------+------+------+---------------------+------+----------------+----------------+
| user_id | date | city | age | sex | last_visit_date | cost | max_dwell_time | min_dwell_time |
+---------+------------+--------+------+------+---------------------+------+----------------+----------------+
| 10002 | 2017-10-02 | 上海 | 20 | 1 | 2017-10-02 12:59:12 | 200 | 5 | 5 |
+---------+------------+--------+------+------+---------------------+------+----------------+----------------+
1 row in set (0.05 sec)
mysql> select city, sum(cost) as total_cost from example_tbl group by city;
+--------+------------+
| city | total_cost |
+--------+------------+
| 广州 | 30 |
| 上海 | 200 |
| 北京 | 37 |
| 深圳 | 111 |
+--------+------------+
4 rows in set (0.05 sec)
小结
本篇适合无脑入门,小白只需要按步骤执行,就可以完成极简集群的安装和部署,如果在过程中遇到问题,可以在Apache Doris 官方微信群里圈我,或者加我微信好友直接私聊我来协助你部署。
微信号:fl\_manyi
下一篇:《Apache Doris 夺命 30 连问!》
我们是一群由数据从业人员,因为热爱凝聚在一起,以开源精神为基础,组成的PowerData数据之力社区。可关注下方公众号后点击“加入我们”,与PowerData一起成长
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。