Doris使用总结

news2024/9/30 21:28:21

场景

Apache Doris是由百度贡献的开源MPP分析型数据库产品,亚秒级查询响应时间,支持实时数据分析;分布式架构简洁,易于运维,可以支持10PB以上的超大数据集;可以满足多种数据分析需求,例如固定历史报表,实时数据分析,交互式数据分析和探索式数据分析等。

Doris更优的方面
使用更简单,如建表更简单,SQL标准支持更好, Join性能更好,导数功能更强大
运维更简单,如灵活的扩缩容能力,故障节点自动恢复,社区提供的支持更好
分布式更强,支持事务和幂等性导数,物化视图自动聚合,查询自动路由,全面元数据管理

架构

底层架构

Google Mesa(数据模型)

Mesa满足一系列复杂且具有挑战性的用户和系统需求,包括接近实时的数据提取和查询能力,以及针对大数据和查询量的高可用性,可靠性,容错性和可伸缩性。但是Mesa本身不提供SQL查询引擎所以借鉴了下面。

Apache Impala(MPP Query Engine)

Impala是一个非常好的MPP SQL查询引擎,做更多的查询优化,在速度上做到了很好。但是缺少比较完美的分布式存储引擎,所以需要集成下面。

MPP (Massively Parallel Processing),即大规模并行处理。简单来说,MPP是将任务并行的分散到多个服务器和节点上,在每个节点上计算完成后,将各自部分的结果汇总在一起得到最终的结果(与Hadoop相似)

注:MPPDB与Hadoop都是将运算分布到节点中独立运算后进行结果合并(分布式计算),但由于依据的理论和采用的技术路线不同而有各自的优缺点和适用范围。
我们现在大数据存储与处理趋势:MPPDB+Hadoop混搭使用,用MPP处理PB级别的、高质量的结构化数据,同时为应用提供丰富的SQL和事物支持能力;用Hadoop实现半结构化、非结构化数据处理。这样可以同时满足结构化、半结构化和非结构化数据的高效处理需求。
 

Apache ORCFile (存储格式,编码和压缩)

只访问查询涉及的列,能大量降低系统I/O;列数据相对来说比较类似,压缩比更高;每一列由一个线索来处理,更有利于查询的并发处理。


系统架构

Doris的系统架构组成主要有:
BackEnd(后端节点),简称BE。
FrontEnd(前端节点),简称FE。
bdbje(BerkekeyDB Java Edition),负责元数据操作日志的持久化、FE 高可用等功能。


FE

主要负责查询的编译,分发和元数据管理。
FE 包含的三种角色的理解
leader跟follower,主要是用来达到元数据的高可用,保证单节点宕机的情况下,元数据能够实时地在线恢复,而不影响整个服务。
observer只是用来扩展查询节点,就是说如果在发现集群压力非常大的情况下,需要去扩展整个查询的能力,那么可以加observer的节点。observer不参与任何的写入,只参与读取。


(1)管理元数据(库, 表, 分区, tablet副本等信息), 执行SQL语句命令。
(2)FE高可用部署, 使用复制协议选主和主从同步元数据, 所有的元数据修改操作, 由FE Leader节点完成, FE Follower节点可执行读操作。 元数据的读写满足顺序一致性。  FE的节点数目采用2n+1, 可容忍n个节点故障。当FE Leader故障时, 从现有的Follower节点重新选主, 完成故障切换。
Observer节点仅从 Leader节点进行元数据同步,不参与选举。能够横向扩展以提供元数据的读服务的扩展性。
(3)FE的SQL layer对用户提交的SQL进行解析, 分析, 语义分析和关系代数优化, 生产逻辑执行计划。
(4)FE的Planner负责把逻辑计划转化为可分布式执行的物理计划, 分发给一组BE。
(5)FE监督,管理BE的上下线, 根据BE的健康状态和存活数, 维持tablet副本的数量。
(6)FE协调数据导入, 保证数据导入的一致性。


BE

主要负责数据的存储、以及查询计划的执行
(1)BE管理tablet副本, tablet是table经过分区分桶形成的子表, 采用列式存储。
(2)BE受驱动FE, 创建或删除子表。
(3)BE接收FE分发的物理执行计划并指定BE coordinator节点, 在BE coordinator的调度下, 与其他BE worker共同协作完成执行。
(4)BE读取本地的列存储引擎获取数据,并通过索引和谓词下沉快速过滤数据。
(5)BE后台执行compact任务, 减少查询时的读放大。
(6)数据导入时, 由FE指定BE coordinator,将数据以fanout的形式写入到tablet多副本所在的BE上。
 

来源:

Apache Doris 为分析而生:Doris 架构_大数据左右手的博客-CSDN博客

Doris架构原理_959y的博客-CSDN博客

安装Docker环境

Docker 要求 CentOS 系统的内核版本高于3.10 ,首先查看系统内核版本是否满足

配置Docker Swarm

节点准备

准备搭建一个跨主机的集群

192.168.10.152 FE

192.168.10.150 BE

注意:

1.docker容器默认情况下,每次内网ip都有变动,但是fe节点如果启动以后ip发生变化,就会启动失败,fe.log中一直滚动 "wait catalog to be ready. FE type UNKNOWN"。BE注册给FE时候也需要固定ip注册,因此FE和BE启动时候回都要用--ip将ip固定住。

#上述解决办法是清理掉/opt/doris/fe/doris-meta中的内容,重启(初始化失败时候这样操作可以,如果是线上,还是应该尽量恢复原来的ip,不能轻易删除

2.doker主机之间默认是无法跨主机通信的,可以选择Docker Swarm使docker可以跨主机通信。

配置Docker Swarm

Docker Swarm是 Docker Overlay 网络的一种简易实现方式,它是 Docker 开发的容器集群管理工具, 与 Docker API 兼容性很好。

并且 Linux 中安装了 Docker,也默认会安装 Swarm。因此,在这里,我们采用 Swarm 实现 集群间的网络通信。

机器配置如下

192.168.10.152 manager

192.168.10.150 worker

1、在 manager 节点创建 Swarm 集群

docker swarm init --advertise-addr=192.168.10.152

效果如下:

docker swarm init --advertise-addr=192.168.10.152

[root@localhost ~]# docker swarm init --advertise-addr=192.168.10.152
Swarm initialized: current node (maw28ll7mlxuwp47z5c5vo2v1) is now a manager.
 
 To add a worker to this swarm, run the following command:
 
docker swarm join --token SWMTKN-1-2bdwwlo8xvdskil05itg66l63dpi931oqnt5gvehlnf1it1auo-2uvypbiu0hpcn1e06hrhctbe8 192.168.10.152:2377
 
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

2、在 worker 节点上执行命令,将自己加入集群

docker swarm join --token SWMTKN-1-2bdwwlo8xvdskil05itg66l63dpi931oqnt5gvehlnf1it1auo-2uvypbiu0hpcn1e06hrhctbe8 10


3、在 manager 节点,查看当前网络集群的节点情况

docker node ls

4、在 manager 节点,创建 overlay   网络

docker network create -d overlay  --attachable  demo

说明:

--attachable 声明当前创建的网络为:其他节点可以访问的网络

5、在 worker 节点的网络列表,是否多了这个网络

docker network ls

6、启动容器,指定该 overlay 网络

--net=demo --privileged=true

大约在0.6版,privileged被引入docker。
使用该参数,container内的root拥有真正的root权限。
否则,container内的root只是外部的一个普通用户权限。
privileged启动的容器,可以看到很多host上的设备,并且可以执行mount。
甚至允许你在docker容器中启动docker容器。

 来源:Docker篇(七): 如何实现 Docker 容器 的跨主机通讯?

 拉取Doris编译镜像(本地)

# 拉取
docker pull apache/incubator-doris:build-env-ldb-toolchain-latest

探测Swarm集群的ip段

1.启动ip测试镜像


docker run -it --name=ip_test -d --net=demo apache/incubator-doris:build-env-ldb-toolchain-latest

2.查看容器ip

docker inspect ip_test

图示位置就是后续doris启动容器应该使用的ip段(FE和BE都需要固定ip,否则重启以后ip变化会出现故障

 启动FE-Docker(10.152本地)

docker run -it -p 8030:8030 -p 9030:9030 -d --name=doris-fe  --net=demo --ip 10.0.1.99  --privileged=true  -v /opt/docker/doris/fe:/opt/doris/fe -v /opt/docker/doris/doris-meta:/opt/doris/doris-meta apache/incubator-doris:build-env-ldb-toolchain-latest

1.进入FE-Docker(本地)以及安装组件(FE-Docker)

# 进入fe-docker
docker exec -ti doris-fe /bin/bash
# 在FE-Docker中安装net-tools用于查看IP,因为已经固定了ip,这一步可以略过
yum install net-tools -y


2.修改FE配置(FE-Docker)

# 查看fe-docker的IPv4地址
ifconfig
# 修改配置文件
vim /opt/doris/fe/conf/fe.conf
# 取消priority_networks的注解,并根据Docker的网段进行配置
priority_networks = 10.0.1.0/16 #这里要根据你Docker的IP确定


3.换Docker-JDK版本(FE-Docker)

# 切换Java版本为JDK1.8,该镜像默认为JDK11
alternatives --set java java-1.8.0-openjdk.x86_64
alternatives --set javac java-1.8.0-openjdk.x86_64
export JAVA_HOME=/usr/lib/jvm/java-1.8.0
# 校验是否切换版本成功
java -version


4.配置FE-Docker的环境变量(FE-Docker)

# 配置环境变量
vim /etc/profile.d/doris.sh
export DORIS_HOME=/opt/doris/fe/
export PATH=$PATH:$DORIS_HOME/bin
# 保存并source
source /etc/profile.d/doris.sh


5.启动Doris-FE(FE-Docker)

start_fe.sh --daemon

6.检查FE是否启动成功

1.检查是否启动成功,JPS命令下有没有PaloFe进程
2.FE 进程启动后,会首先加载元数据,根据 FE 角色的不同,在日志中会看到 transfer from UNKNOWN to MASTER/FOLLOWER/OBSERVER。最终会看到 thrift server started 日志,并且可以通过 mysql 客户端连接到 FE,则表示 FE 启动成功。
3.也可以通过如下连接查看是否启动成功:
http://fe_host:fe_http_port/api/bootstrap
如果返回:
{"status":"OK","msg":"Success"}
则表示启动成功,其余情况,则可能存在问题。
4.外网环境访问http://fe_host:fe_http_port 查看是否可以访问WebUI界面,登录账号默认为root/admin,密码为空,第一次登录WebUI界面会有较长时间加载时间

5.查看日志在/opt/doris/fe/log
6.ctrl + D 退出docker
注:如果在 fe.log 中查看不到启动失败的信息,也许在 fe.out 中可以看到。

7.安装MySQL客户端(本地)

wget -c http://mirrors.ustc.edu.cn/mysql-ftp/Downloads/MySQL-5.7/mysql-5.7.37-1.el7.x86_64.rpm-bundle.tar
tar -xvf mysql-5.7.37-1.el7.x86_64.rpm-bundle.tar
rpm -ivh mysql-community-common-5.7.37-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.37-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.37-1.el7.x86_64.rpm

8.连接FE并修改密码(本地)

mysql -h FE-Docer的IP -P 9030 -uroot
SET PASSWORD FOR 'root' = PASSWORD('your_password');
# 也可以创建新用户
CREATE USER 'test' IDENTIFIED BY 'test_passwd';

9.后续链接时需要使用如下格式(本地)

mysql -h FE_HOST -P9030 -uusername -ppassword

10.添加BE节点注册信息(本地)

ALTER SYSTEM ADD BACKEND "host:port";
# 其中 host 为 BE 所在节点 ip;port 为 be/conf/be.conf 中的 heartbeat_service_port,默认9050。

启动BE-Docker(10.150本地)

docker run -it -p 9063:9060 -d --name=doris-be --net=demo --ip 10.0.1.6  --privileged=true   -v /opt/docker/doris/be-03:/opt/doris/be apache/incubator-doris:build-env-ldb-toolchain-latest

1.进入BE-Docker(本地)以及安装组件(BE-Docker)

# 进入be-docker,以01为例
docker exec -ti doris-be-01 /bin/bash
# 安装net-tools用于查看IP 因为已经固定了ip,这一步可以略过
yum install net-tools -y

2.修改BE配置(BE-Docker)

# 查看fe-docker的IPv4地址
ifconfig
# 修改配置文件
vim /opt/doris/be/conf/be.conf
# 取消priority_networks的注解,并根据Docker的网段进行配置
priority_networks = 10.0.1.0/16 #这里要根据你Docker的IP确定

3.配置BE-Docker的环境变量(BE-Docker)

# 配置环境变量
vim /etc/profile.d/doris.sh
export DORIS_HOME=/opt/doris/be/
export PATH=$PATH:$DORIS_HOME/bin
# 保存并source
source /etc/profile.d/doris.sh

启动Doris-BE(BE-Docker)
start_be.sh --daemon


4.检查BE是否启动成功

1.BE 进程启动后,如果之前有数据,则可能有数分钟不等的数据索引加载时间。
2.如果是 BE 的第一次启动,或者该 BE 尚未加入任何集群,则 BE 日志会定期滚动 waiting to receive first heartbeat from frontend 字样。表示 BE 还未通过 FE 的心跳收到 Master 的地址,正在被动等待。这种错误日志,在 FE 中 ADD BACKEND 并发送心跳后,就会消失。如果在接到心跳后,又重复出现 master client, get client from cache failed.host: , port: 0, code: 7 字样,说明 FE 成功连接了 BE,但 BE 无法主动连接 FE。可能需要检查 BE 到 FE 的 rpc_port 的连通性。
3.如果 BE 已经被加入集群,日志中应该每隔 5 秒滚动来自 FE 的心跳日志:get heartbeat, host: xx.xx.xx.xx, port: 9020, cluster id: xxxxxx,表示心跳正常。
4.其次,日志中应该每隔 10 秒滚动 finish report task success. return code: 0 的字样,表示 BE 向 FE 的通信正常。
5.同时,如果有数据查询,应该能看到不停滚动的日志,并且有 execute time is xxx 日志,表示 BE 启动成功,并且查询正常。
也可以通过如下连接查看是否启动成功:
6.http://be_host:be_http_port/api/health
如果返回:
{"status": "OK","msg": "To Be Added"}
则表示启动成功,其余情况,则可能存在问题。
注:如果在 be.INFO 中查看不到启动失败的信息,也许在 be.out 中可以看到。

5.测试连通性(本地)

# 登录FE-MySQL

mysql -h FE_HOST -P9030 -uusername -ppassword

# 执行命令查看BE运行情况。如一切正常,isAlive 列应为 true。

SHOW PROC '/backends';

若连通性测试成功,则循环完成其他BE节点的部署即可

来源:

Doris-Docker环境搭建_docker 安装doris_北栀一刺的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/437855.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Maven(六):Maven的使用——继承与聚合

Maven(六):Maven的使用——继承与聚合 前言一、实验九:继承1、概念2、作用3、举例4、操作4.1 创建父工程4.2 创建模块工程4.3 查看被添加新内容的父工程 pom.xml4.4 解读子工程的pom.xml4.5 在父工程中配置依赖的统一管理4.6 子工…

电脑端(PC)按键精灵——5.找色/找图命令

电脑端(PC)按键精灵——5.找色/找图命令 注:说了键盘、鼠标、其他、控制命令还有安装内容,现在说下颜色/图形命令,这一节相当重要 按键精灵小白入门详细教程: 电脑端(PC)按键精灵—小白入门 详细教程 命令介绍 1.GetPixelCol…

人大金仓携手深信服打造更高效、更融合一体化平台联合解决方案

近日,人大金仓数据库与深信服超融合平台完成深度优化,表现出性能更优、运行更稳定、数据更安全。双方联合打造更高效、更融合的一体化平台联合解决方案,能更好地满足行业信创升级需求。 随着新一轮信创政策陆续出台,信创产业从党政…

基于 SpringBoot + Vue 实现的可视化拖拽编辑的大屏项目

今天给小伙伴们分享一个基于 SpringBoot Vue 实现的可视化拖拽编辑的大屏项目; 一、简介 这个是一个开源的一个BI平台,酷炫大屏展示,能随时随地掌控业务动态,让每个决策都有数据支撑。 多数据源支持,内置mysql、el…

攻防世界-Reversing-x64Elf-100

Reversing-x64Elf-100 18最佳Writeup由 yuchouxuan 提供 收藏 反馈 难度:1 方向:Reverse 题解数:15 解出人数:2460 题目来源: 题目描述: 暂无 note:undefined8 FUN_004006fd(long param_1){int local_2c;char *local_28 …

设置环境变量

文章目录 window设置linux设置python设置 window设置 命令行设置 set 临时设置setx 永久设置 # 打开一个cmd命令行 set # 查看所有环境变量 set FLASK_APPsuperset # 临时设置,当前窗口有效 set FLASK_APP%FLASK_APP%;777 # # 查看 echo %FLASK_APP%# 永久设置…

1.18 从0开始学习Unity游戏开发--资源加载

在上一篇文章中,我们大约是开始接触到资源加载的事情了,场景资源则是一个比较特殊的资源,我们只要添加到Build Settings里面,那么我们就可以通过API直接加载。 但是其他类型的资源怎么办呢?比如我们制作一个网络游戏&…

为什么Spring和IDEA不推荐使用@Autowired注解?

在Spring开发中,Autowired注解是一个常用的依赖注入方式。但是,你可能会惊奇地发现,Spring和IDEA都不推荐使用Autowired注解。关于这个问题,其实答案相对统一,实际上用大白话说起来也容易理解。 官方答案 首先&#…

使用springboot解释什么是jwt

目录 使用springboot解释什么是jwt简介组成结构在springboot中的作用1. 添加依赖 在pom.xml文件中添加以下依赖2. 配置JWT 在Spring Boot的配置文件中配置JWT的相关参数,例如密钥、过期时间等:3. 创建JWT工具类 创建一个JWT工具类,用于生成和…

数据治理体系建设

01 数据治理建设路径 1. 业务数字化的目的是打造一体化的业务流、信息流与数据流 从企业整体经营管理的角度,战略制定及分解—领域业务目标制定—业务方案设计—业务需求识别 & 信息系统功能及数据库设计—数据汇聚及分析—业务目标监测及改善,这个…

Mysql安装详细教程

数据库相关概念 而目前主流的关系型数据库管理系统的市场占有率排名如下: Oracle:大型的收费数据库,Oracle公司产品,价格昂贵。 MySQL:开源免费的中小型数据库,后来Sun公司收购了MySQL,而Oracle…

PEIS体检管理系统源码,自主知识产权,文档齐全,功能完善

PEIS体检管理系统源码,自主知识产权,文档齐全,有演示。 体检条码化管理,体检数据比对,丰富的诊断模板,自动产生小结、综述和建议。 文末获取联系! PEIS体检管理系统对医院体检中心进行系统化和…

java二维数组遍历

在 java中,二维数组是指在二维平面上的一个数组。在二维数组中,数据都是按行排序的。我们通常可以用“从上到下”、“从左到右”、“从后到前”等方法来遍历二维数组。由于二维数组中数据的有序性,我们可以在二维数组中快速地找到我们所需要的…

手机穿戴设备能力共享,提升丰富交互体验

HUAWEI Wear Engine面向手机和穿戴设备的应用与服务开发者,提供华为穿戴设备开放能力。 开发者通过调用Wear Engine开放能力,可以实现手机上的生态应用与服务给华为穿戴设备发消息、发通知、传输数据,并获取穿戴设备状态、读取传感器数据等&…

65W氮化镓(GaN)充电头PD快充方案

2023年数码圈中讨论较多的莫过于65W氮化镓(GaN)充电头。65W快充是目前快充市场出货的主流规格;氮化镓具有高可靠性,能够承受短时间过压;将GaN用于充电器的整流管后,能降低开关损耗和驱动损耗,提…

超清大屏沉浸音效,用极米H6 4K版看剧更有代入感

近日,由张译主演的悬疑剧《他是谁》开播,该剧主要讲述了以卫国平(张译饰)为首的刑警坚持不懈8年追凶,帮受害者讨回公道的故事。《狂飙》作为现象级爆款剧落幕不久,饰演刑警安欣的影帝张译,又在悬疑剧《他是谁》中主演刑…

本地套接字(domain)

本地套接字是一种特殊类型的套接字,和 TCP/UDP 套接字不同。TCP/UDP 即使在本地地址通信,也要走系统网络协议栈,而本地套接字,严格意义上说提供了一种单主机跨进程间调用的手段,减少了协议栈实现的复杂度,效…

consul集群搭建教程

简言 1. 使用consul单节点有宕机,数据丢失的风险,为了安全,使用consul集群更靠谱 2. consul的各个版本下载地址在 Consul Versions | HashiCorp Releases 3. 本文使用consul的版本是consul1.15.1,所以请下载名字为 consul_1.15…

数据密集型应用存储与检索设计

本文内容翻译自《数据密集型应用系统设计》,豆瓣评分高达 9.7 分。 什么是「数据密集型应用系统」? 当数据(数据量、数据复杂度、数据变化速度)是一个应用的主要挑战,那么可以把这个应用称为数据密集型的。与之相对的是…

免费文本转语音(在线文本转语音)

个人开发的网站,已经维护快一年了,接口稳定,基于微软官方接口,可在线生成,手机电脑平板通用。每天提供一定额度(时而5000时而2000时而500,根据服务器压力调整)的免费字数供大家使用。…