本篇只做简洁的 Apache Doris 部署流程介绍,不做过多的 Doris 特性和细节参数介绍,只专注于如何快速部署和启动以及测试使用。
和官网最大的区别在于只需跟着步骤走,不需要关注太多额外的东西,其他额外的参数也好、原理也罢,都会在后续文章或者官网文档里进行详尽说明~
后续【Apache Doris 补习班】公众号的文章风格皆为如此,标题讲什么,就会简明扼要的说清楚是什么、怎样做,尽可能减少大家阅读压力,短篇幅也能得到大收获。
Apache Doris 是一款 MPP 架构的实时数据仓库,已全面实现向量化引擎。
在架构上:
其中,FE 负责元数据存储、查询语法解析、查询任务下发以及对外交互,BE 负责实际数据存储、执行计算
在部署上:
在环境上:
部署以 linux 系统为例,分为裸机/虚机部署和 Docker 部署。
其中需要注意的是,生产只建议使用裸机/虚机部署,当前版本不建议使用 Docker 部署生产环境!
vi /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536重启机器使其生效,或者执行以下命令让当前临时生效
ulimit -n 65535max_map_conut 值sysctl -w vm.max_map_count=2000000df -Huname -a
cat /proc/cpuinfo | grep avx2根据第一条命令的返回值确定是 X86_64 机器还是 ARM(Aarch)机器。 如果是 X86_64 的机器,根据第二条命令是否有返回值确定是否有 AVX2 指令集,有返回值则为支持 AVX2 指令集的 CPU,反之亦然。
apache-doris-dependencies 包的 java-udf-jar-with-dependencies.jar 放到 be/lib 目录下mv java-udf-jar-with-dependencies.jar ${DORIS_HOME}/be/libfe.conf 和 be.conf 中的 priority_networks 参数# 先查看当前节点的内网 IP
ip addr 或者 ifconfig
# 修改 priority_networks
vim fe.conf 或者 be.conf
priority_networks=当前内网IP/32sh {$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" --daemonmysql -uroot -P9030 -h127.0.0.1注册 Follower 角色
alter system add follower "需要添加的 FE 节点内网 IP:9010";注册 Observer 角色
alter system add observer "需要添加的 FE 节点内网 IP:9010";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 部署适用于个人/组织学习、调试BUG、测试功能等场景
安装好 Docker 环境以及 Docker-compose 环境
执行以下命令完成 max_map_count 参数调整:
sysctl -w vm.max_map_count=2000000本篇以 1FE 1BE 为例部署,使用平台为 X86_64 平台
在 2.0 版本开始,我将会更新官方镜像,支持 hostname 配置寻址,同时解决 K8S 部署问题
最近有点忙,预计 6-15 以前搞定~
docker network create --driver bridge --subnet=172.20.80.0/24 doris-networkdocker 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_64docker-compose.yamlversion: '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/24docker-compose up -d# docker run 部署
docker ps -a
# docker-compose 部署
docker-compose ps -a# docker run 部署
mysql -uroot -P9030 -h172.20.80.2
# docker-compose 部署
mysql -uroot -P9030 -h172.20.81.2Backend 状态show backends再次强调一下,连接 Doris 只需要支持 MySQL 的客户端,无需 MySQL 的服务端,这个客户端可以是 MySQL-Client 黑窗口,可以是 Navicat、Dbeaver 之类的 GUI 可视化工具,也可以是通过 JDBC-MySQL 协议通过代码进行连接,不需要再安装一个 MySQL-Server!!!
mysql -uroot -P9030 -h127.0.0.1create database demo;use demo;
CREATE TABLE IF NOT EXISTS demo.example_tbl
(
`user_id` LARGEINT NOT NULL COMMENT "用户id",
`date` DATE NOT NULL COMMENT "数据灌入日期时间",
`city` VARCHAR() 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
PROPERTIES (
"replication_allocation" = "tag.location.default: 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文件中。
这里我们通过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执行成功之后我们可以看到下面的返回信息
{
"TxnId": ,
"Label": "8690a5c7-a493-48fc-b274-1bb7cd656f25",
"TwoPhaseCommit": "false",
"Status": "Success",
"Message": "OK",
"NumberTotalRows": ,
"NumberLoadedRows": ,
"NumberFilteredRows": ,
"NumberUnselectedRows": ,
"LoadBytes": ,
"LoadTimeMs": ,
"BeginTxnTimeMs": ,
"StreamLoadPutTimeMs": ,
"ReadDataTimeMs": ,
"WriteDataTimeMs": ,
"CommitAndPublishTimeMs":
}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 |
+---------+------------+--------+------+------+---------------------+------+----------------+----------------+
| | -10-01 | 北京 | | | -10-01 :: | | | |
| | -10-01 | 北京 | | | -10-01 :: | | | |
| | -10-02 | 上海 | | | -10-02 :: | | | |
| | -10-02 | 广州 | | | -10-02 :: | | | |
| | -10-01 | 深圳 | | | -10-01 :: | | | |
| | -10-03 | 深圳 | | | -10-03 :: | | | |
+---------+------------+--------+------+------+---------------------+------+----------------+----------------+
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 |
+---------+------------+--------+------+------+---------------------+------+----------------+----------------+
| | -10-02 | 上海 | | | -10-02 :: | | | |
+---------+------------+--------+------+------+---------------------+------+----------------+----------------+
row in set (0.05 sec)
mysql> select city, sum(cost) as total_cost from example_tbl group by city;
+--------+------------+
| city | total_cost |
+--------+------------+
| 广州 | |
| 上海 | |
| 北京 | |
| 深圳 | |
+--------+------------+
rows in set (0.05 sec)本篇适合无脑入门,小白只需要按步骤执行,就可以完成极简集群的安装和部署,如果在过程中遇到问题,可以在Apache Doris 官方微信群里圈我,或者加我微信好友直接私聊我来协助你部署。
本文分享自 Apache Doris 补习班 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!