自制Apache-Doris 2.0.4镜像Docker部署一Fe和一Be集群及遇到的问题解决
文章目录
- 1.前言
- 2.doris是什么?
- 2.1简介
- 2.2介绍
- 2.3使用场景
- 2.4架构
- 3.官网
- 4.构建部署
- 4.1 构建环境
- 4.2 doris2.0.4的fe和be镜像构建
- 4.2.1 fe2.0.4镜像构建脚本
- 4.2.2 be2.0.4镜像构建
- 4.2.3 启动脚本如下
- 4.2.4 fe挂载文件如下
- 4.2.5 be挂载文件如下
- 4.2.6 fe启动日志
- 4.2.7 be启动日志
- 5.问题及解决
- 5.1解决办法
- 5.1.1 进入be容器启动be
- 5.1.2进入fe容器手动注册be
- 6.doris后台
- 7.使用navicat客户端连接如下
- 8.本地构建的镜像推送到阿里云镜像仓库如下
- 6.doris官方管理平台
- 7.总结
1.前言
由于之前学习了下doris,看了下官网,然后就自己根据官网提供的构建镜像的步骤,构建了docker镜像,然后就遇到了Be镜像启动不会自动注册到Fe的问题,解决办法是去be里面手动注册即可。本来说搞个docker镜像拉起来耍一耍,没想到遇到了这个奇葩的问题,找了官方的大佬看了下,大佬说估计是be的启动sh脚本有点问题,后面我在doris交流群里面问那个官方大佬,他没有回我,所以不知道后面版本有没有解决了这个问题,我还给官方提了一个问题,地址如下:
https://ask.selectdb.com/questions/D1A3/zi-zhi-doris2-0-4-jing-xiang-docker-bu-shu-yi-fe-he-yi-be-ji-qun-be-qi-dong-bu-hui-zi-dong-zhu-ce-dao-fe
之前本来说研究下doris的,后面遇到这个问题去联系官方,官方也没有回复,后面就没有搞了,然后就想了下,把之前搞的这个过程记录下,以便后面更好的入门和快速上手。
2.doris是什么?
2.1简介
Apache Doris 是一个基于 MPP 架构的高性能、实时的分析型数据库,以极速易用的特点被人们所熟知,仅需亚秒级响应时间即可返回海量数据下的查询结果,不仅可以支持高并发的点查询场景,也能支持高吞吐的复杂分析场景,这个简短的指南将告诉你如何下载 Doris 最新稳定版本,在单节点上安装并运行它,包括创建数据库、数据表、导入数据及查询等。
2.2介绍
Apache Doris 是一个基于 MPP 架构的高性能、实时的分析型数据库,以极速易用的特点被人们所熟知,仅需亚秒级响应时间即可返回海量数据下的查询结果,不仅可以支持高并发的点查询场景,也能支持高吞吐的复杂分析场景。基于此,Apache Doris 能够较好的满足报表分析、即席查询、统一数仓构建、数据湖联邦查询加速等使用场景,用户可以在此之上构建用户行为分析、AB 实验平台、日志检索分析、用户画像分析、订单分析等应用。
Apache Doris 最早是诞生于百度广告报表业务的 Palo 项目,2017 年正式对外开源,2018 年 7 月由百度捐赠给 Apache 基金会进行孵化,之后在 Apache 导师的指导下由孵化器项目管理委员会成员进行孵化和运营。目前 Apache Doris 社区已经聚集了来自不同行业数百家企业的 400 余位贡献者,并且每月活跃贡献者人数也超过 100 位。 2022 年 6 月,Apache Doris 成功从 Apache 孵化器毕业,正式成为 Apache 顶级项目(Top-Level Project,TLP)
Apache Doris 如今在中国乃至全球范围内都拥有着广泛的用户群体,截止目前, Apache Doris 已经在全球超过 2000 家企业的生产环境中得到应用,在中国市值或估值排行前 50 的互联网公司中,有超过 80% 长期使用 Apache Doris,包括百度、美团、小米、京东、字节跳动、腾讯、网易、快手、微博、贝壳等。同时在一些传统行业如金融、能源、制造、电信等领域也有着丰富的应用。
2.3使用场景
如下图所示,数据源经过各种数据集成和加工处理后,通常会入库到实时数仓 Doris 和离线湖仓(Hive, Iceberg, Hudi 中),Apache Doris 被广泛应用在以下场景中。
- 报表分析
- 实时看板 (Dashboards)
- 面向企业内部分析师和管理者的报表
- 面向用户或者客户的高并发报表分析(Customer Facing Analytics)。比如面向网站主的站点分析、面向广告主的广告报表,并发通常要求成千上万的 QPS ,查询延时要求毫秒级响应。著名的电商公司京东在广告报表中使用 Apache Doris ,每天写入 100 亿行数据,查询并发 QPS 上万,99 分位的查询延时 150ms。
- 即席查询(Ad-hoc Query):面向分析师的自助分析,查询模式不固定,要求较高的吞吐。小米公司基于 Doris 构建了增长分析平台(Growing Analytics,GA),利用用户行为数据对业务进行增长分析,平均查询延时 10s,95 分位的查询延时 30s 以内,每天的 SQL 查询量为数万条。
- 统一数仓构建 :一个平台满足统一的数据仓库建设需求,简化繁琐的大数据软件栈。海底捞基于 Doris 构建的统一数仓,替换了原来由 Spark、Hive、Kudu、Hbase、Phoenix 组成的旧架构,架构大大简化。
- 数据湖联邦查询:通过外表的方式联邦分析位于 Hive、Iceberg、Hudi 中的数据,在避免数据拷贝的前提下,查询性能大幅提升。
2.4架构
Doris整体架构如下图所示,Doris 架构非常简单,只有两类进程
- Frontend(FE),主要负责用户请求的接入、查询解析规划、元数据的管理、节点管理相关工作。
- Backend(BE),主要负责数据存储、查询计划的执行。
这两类进程都是可以横向扩展的,单集群可以支持到数百台机器,数十 PB 的存储容量。并且这两类进程通过一致性协议来保证服务的高可用和数据的高可靠。这种高度集成的架构设计极大的降低了一款分布式系统的运维成本。
在使用接口方面,Doris 采用 MySQL 协议,高度兼容 MySQL 语法,支持标准 SQL,用户可以通过各类客户端工具来访问 Doris,并支持与 BI 工具的无缝对接。Doris 当前支持多种主流的 BI 产品,包括不限于 SmartBI、DataEase、FineBI、Tableau、Power BI、SuperSet 等,只要支持 MySQL 协议的 BI 工具,Doris 就可以作为数据源提供查询支持。
在存储引擎方面,Doris 采用列式存储,按列进行数据的编码压缩和读取,能够实现极高的压缩比,同时减少大量非相关数据的扫描,从而更加有效利用 IO 和 CPU 资源。
Doris 也支持比较丰富的索引结构,来减少数据的扫描:
- Sorted Compound Key Index,可以最多指定三个列组成复合排序键,通过该索引,能够有效进行数据裁剪,从而能够更好支持高并发的报表场景
- Min/Max :有效过滤数值类型的等值和范围查询
- Bloom Filter :对高基数列的等值过滤裁剪非常有效
- Invert Index :能够对任意字段实现快速检索
在存储模型方面,Doris 支持多种存储模型,针对不同的场景做了针对性的优化:
- Aggregate Key 模型:相同 Key 的 Value 列合并,通过提前聚合大幅提升性能
- Unique Key 模型:Key 唯一,相同 Key 的数据覆盖,实现行级别数据更新
- Duplicate Key 模型:明细数据模型,满足事实表的明细存储
Doris 也支持强一致的物化视图,物化视图的更新和选择都在系统内自动进行,不需要用户手动选择,从而大幅减少了物化视图维护的代价。
在查询引擎方面,Doris 采用 MPP 的模型,节点间和节点内都并行执行,也支持多个大表的分布式 Shuffle Join,从而能够更好应对复杂查询。
Doris 查询引擎是向量化的查询引擎,所有的内存结构能够按照列式布局,能够达到大幅减少虚函数调用、提升 Cache 命中率,高效利用 SIMD 指令的效果。在宽表聚合场景下性能是非向量化引擎的 5-10 倍。
Doris 采用了 Adaptive Query Execution 技术, 可以根据 Runtime Statistics 来动态调整执行计划,比如通过 Runtime Filter 技术能够在运行时生成 Filter 推到 Probe 侧,并且能够将 Filter 自动穿透到 Probe 侧最底层的 Scan 节点,从而大幅减少 Probe 的数据量,加速 Join 性能。Doris 的 Runtime Filter 支持 In/Min/Max/Bloom Filter。
在优化器方面 Doris 使用 CBO 和 RBO 结合的优化策略,RBO 支持常量折叠、子查询改写、谓词下推等,CBO 支持 Join Reorder。目前 CBO 还在持续优化中,主要集中在更加精准的统计信息收集和推导,更加精准的代价模型预估等方面。
3.官网
官方的文档中文支持友好且非常的详细,仔细研读基本可以学会
https://doris.apache.org/zh-CN/docs/dev/get-starting/quick-start
4.构建部署
4.1 构建环境
环境使用的是window10专业版安装的 Docker Desktop在wsl2子系统用的是CentOs7.x
4.2 doris2.0.4的fe和be镜像构建
下载最新的二进制包解压
https://doris.apache.org/download/
4.2.1 fe2.0.4镜像构建脚本
# 选择基础镜像
FROM openjdk:8u342-jdk
# 设置环境变量
ENV JAVA_HOME="/usr/local/openjdk-8/"
PATH="/opt/apache-doris/fe/bin:$PATH"
# 下载软件至镜像内,可根据需要替换
COPY ./resource/fe /opt/fe
RUN apt-get update &&
apt-get install -y default-mysql-client &&
apt-get clean &&
mkdir /opt/apache-doris &&
cd /opt &&
mv ./fe/ /opt/apache-doris/
RUN chmod 755 /opt/apache-doris/fe/bin/init_fe.sh
ENTRYPOINT ["/bin/bash","/opt/apache-doris/fe/bin/init_fe.sh"]
resource下放的是2.0.4源码包中的fe文件夹
且在fe的bin目录中放入了:
4.2.2 be2.0.4镜像构建
# 选择基础镜像
FROM openjdk:8u342-jdk
# 设置环境变量
ENV JAVA_HOME="/usr/local/openjdk-8/"
PATH="/opt/apache-doris/be/bin:$PATH"
# 下载软件至镜像内,可根据需要替换
COPY ./resource/be /opt/be
RUN apt-get update &&
apt-get install -y default-mysql-client &&
apt-get clean &&
mkdir /opt/apache-doris &&
cd /opt &&
mv ./be/ /opt/apache-doris/
RUN chmod 755 /opt/apache-doris/be/bin/init_be.sh
ENTRYPOINT ["/bin/bash","/opt/apache-doris/be/bin/init_be.sh"]
同fe一样在reource里放入:
be的bin下放入:
fe和be中的init脚本是从2.0.4的源码包中:
https://github.com/apache/doris/releases
拷贝到上面的构建文件中的
如果是在windows下直接打开复制过去的,会有让shell文件的格式有问题,镜像运行的时候报初始化脚本\r问题,所以需要在wsl进入centOs子系统中执行如下:
sed -i ‘s/\r$//’ filename
将init_fe.sh/init_be.sh格式转为linux下的格式
4.2.3 启动脚本如下
docker network create --subnet=172.10.70.0/24 doris-network
docker network rm doris-network 这个命令不执行,用于删除自定义的docker网卡,执行其它几个命令即可
docker run --privileged -itd --name=fe --env FE_SERVERS="fe1:172.10.70.2:9010" --env FE_ID=1 -p 8030:8030 -p 9030:9030 -v D:\doris\fe\doris-meta:/opt/apache-doris/fe/doris-meta -v D:\doris\fe\log:/opt/apache-doris/fe/log -v D:\doris\fe\conf\fe.conf:/opt/apache-doris/fe/conf/fe.conf --network=doris-network --ip=172.10.70.2 apache-doris:2.0.4-fe
docker run --privileged -itd --name=be --env FE_SERVERS="fe1:172.10.70.2:9010" --env BE_ADDR="172.10.70.3:9050" -p 8040:8040 -v D:\doris\be\storage:/opt/apache-doris/be/storage -v D:\doris\be\log:/opt/apache-doris/be/log -v D:\doris\be\conf\be.conf:/opt/apache-doris/be/conf/be.conf --network=doris-network --ip=172.10.70.3 apache-doris:2.0.4-be
4.2.4 fe挂载文件如下
4.2.5 be挂载文件如下
fe.conf和be.conf都是从容器中没有挂载启动起来,然后下载下来放到上面的挂载路径中的
4.2.6 fe启动日志
4.2.7 be启动日志
5.问题及解决
be日志一直是打印的是be自动注册fe失败
5.1解决办法
5.1.1 进入be容器启动be
进入be命令行也执行了:
sysctl -w vm.max_map_count=2000000
启动bex需要先将swapoff关闭
swapoff -a
执行/opt/apache-doris/be/bin/start_be.sh --daemon
5.1.2进入fe容器手动注册be
进入fe命令行执行了:
sysctl -w vm.max_map_count=2000000
进入fe命令行手动注册be如下:
# 进入一台有mysql的服务器,端口9093,账号root,默认密码是空
mysql -h 172.10.70.2 -P9030 -uroot
# 注册be
ALTER SYSTEM ADD BACKEND “172.10.70.3:9050”;
# 查看be Alive属性如果是true就ok了
show PROC ‘/backends’;
±----------±------------±--------------±-------±---------±---------±--------------------±--------------------±------±---------------------±----------±-----------------±-------------------±--------------±--------------±--------±---------------±-------------------±-------------------------±-------±----------------------------±------------------------------------------------------------------------------------------------------------------------------±------------------------±---------+
| BackendId | Host | HeartbeatPort | BePort | HttpPort | BrpcPort | LastStartTime | LastHeartbeat | Alive | SystemDecommissioned | TabletNum | DataUsedCapacity | TrashUsedCapcacity | AvailCapacity | TotalCapacity | UsedPct | MaxDiskUsedPct | RemoteUsedCapacity | Tag | ErrMsg | Version | Status | HeartbeatFailureCounter | NodeRole |
±----------±------------±--------------±-------±---------±---------±--------------------±--------------------±------±---------------------±----------±-----------------±-------------------±--------------±--------------±--------±---------------±-------------------±-------------------------±-------±----------------------------±------------------------------------------------------------------------------------------------------------------------------±------------------------±---------+
| 10114 | 172.10.70.3 | 9050 | 9060 | 8040 | 8060 | 2024-02-28 01:10:51 | 2024-02-28 01:13:39 | true | false | 14 | 0.000 | 0.000 | 8.397 GB | 57.028 GB | 85.28 % | 85.28 % | 0.000 | {“location” : “default”} | | doris-2.0.4-rc06-003a815b63 | {“lastSuccessReportTabletsTime”:“2024-02-28 01:13:03”,“lastStreamLoadTime”:-1,“isQueryDisabled”:false,“isLoadDisabled”:false} | 0 | mix |
±----------±------------±--------------±-------±---------±---------±--------------------±--------------------±------±---------------------±----------±-----------------±-------------------±--------------±--------------±--------±---------------±-------------------±-------------------------±-------±----------------------------±------------------------------------------------------------------------------------------------------------------------------±------------------------±---------+
6.doris后台
7.使用navicat客户端连接如下
使用的地址是127.0.0.1/localhost/wifi地址是可以连上的,但是使用docker的桥接内网地址172.10.70.2是连不上的,端口是9030
到此我这种方式是不是就已经将doris镜像构建和部署1fe和1be集群搞好了?
8.本地构建的镜像推送到阿里云镜像仓库如下
registry.cn-hangzhou.aliyuncs.com/bigfei/zlf:apache-doris-2.0.4-fe
registry.cn-hangzhou.aliyuncs.com/bigfei/zlf:apache-doris-2.0.4-be
6.doris官方管理平台
doris官方提供了一个运维管理doris集群的平台工具
Cluster Manager for Apache Doris(以下简称 Doris Manager)是 SelectDB 推出的管理运维 Apache Doris、SelectDB Doris 集群的工具
https://docs.selectdb.com/docs/enterprise/cluster-manager-guide/deployment-guide/deployment-guide-23.x
7.总结
在传统业务中,基本使用的是万年的mysql,一个mysql数据库撸所有,但是在数据量非常庞大的数据体量下,mysql的能力变得越来越垃圾,所以数据量大,查询灰常灰常慢,基本嗝屁了,所以数据就变成了负债,而没有发挥数据真真的价值,此时就需要寻找代替mysql数据库的方案,由于接触到了Apache Doris,它及支持事务,又有强大的数据查询分析能力,数据join能力也挺强的,且支持mysql的协议,可以对海量的数据做存储分析,查询响应在亚秒级(快),它可以代替mysql、ES(es不支持事务,关联查询能力弱,宽表能力强),它是一款新星的开源数据库,性能强悍,功能强大,也可以替换ELK日志手机存储的替代方案,它是java和C++的混合产品,它是一款前沿大数据领域的开源产品,它的生态活跃,支持各种数据产品数据的CDC连接器丰富,支持 Spark、Flink、hive、kafa等大数据领域的组件,还有一款很猛的开源产品,跟doris的架构很相似,它就是StarRocks,这里简单的提一下StarRocks(快得飞起)这个新的技术名词,后面有机会在分享。
https://docs.starrocks.io/zh/docs/introduction/StarRocks_intro/
Spark、doris、StarRocks及ES这三个都是MPP架构(大规模并行处理),Hadoop就是一种常见的MPP存储与分析工具。以后有机会在项目中使用这两款新大数据产品解决业务问题,到时候我会分享研究学习运用等经验,这里只是做一个简单的分享。到此我的分享结束了,希望对你有所启发和帮助,请一键三连,么么么哒!