Apache Doris
Apache Doris教程
1.Doris 简介
1.1 Doris 概述
Apache Doris 由百度大数据部研发(之前叫百度 Palo,2018 年贡献到 Apache 社区后,
更名为 Doris ),在百度内部,有超过 200 个产品线在使用,部署机器超过 1000 台,单一
业务最大可达到上百 TB。
Apache Doris 是一个现代化的 MPP(Massively Parallel Processing,即大规模并行处理)
分析型(OLAP)数据库产品。仅需亚秒级响应时间即可获得查询结果,有效地支持实时数据分析。
Apache Doris 的分布式架构非常简洁,易于运维,并且可以支持 10PB 以上的超大数据集。
Apache Doris 可以满足多种数据分析需求,例如固定历史报表,实时数据分析,交互式数据分析和探索式数据分析等。
1.2OLAP和OLTP
- 联机事务处理OLTP(On-Line Transaction Processing)
- 公司业务系统使用数据库的场景,针对业务系统数据库有大量随机的增删改查
- 高并发
- 速度要快
- 支持事务
- 联机分析处理OLAP(On-Line Analytical Processing)
- 公司的数据分析使用数据库的场景,对已经生成好的数据进行统计分析
- 一次操作都是针对的整个数据集
- 只有查这个动作,不会去增删改
- 查询的响应速度相对慢点也能接受
- 并发量要求不是太高
OLAP和OLTP比较
OLTP | OLAP | |
数据源 | 仅包含当前运行日常业务数据 | 整合来自多个来源的数据,包括OLTP和外部来源 |
目的 | 面向应用,面向业务,支撑事务 | 面向主题,面向分析,支持分析决策 |
焦点 | 当下 | 主要面向过去,面向历史(实时数仓除外) |
任务 | 增删改查 | 主要是用于读,select查询,写操作很少 |
响应时间 | 毫秒 | 秒,分钟,小时,天,这些取决于数据量和查询的复杂程度 |
数据量 | 小数据,MB,GB | 大数据,TP,PB |
常见的开源OLAP引擎
开源OLAP引擎 | 优点 | 缺点 | 技术融合成本 | 易用性 | 使用场景 | 运维成本 | 引擎类型 |
ClickHouse | 列式存储 单极性彪悍 保留明细数据 | 分布式集群在线扩展支持不佳 运维成本极高 | 高 | 非标协议接口 | 全面 | 高 | 纯列存OLAP |
Druid | 实时数据摄入 列式存储和位图索引 多租户和高并发 | OLAP性能分场景表现差异大 使用门槛高 仅支持聚合查询 | 高 | 非标协议接口 | 局限 | 高 | MOLAP |
TiDB | HTAP混合数据库 同时支持明细和聚合查询 高度兼容mysql | 非列式存储 OLAP能力不足 | 低 | SQL标准 | 全面 | 低 | 纯列存OLAP |
Kylin | 与计算引擎,可以对数据一次聚合多次查询 支持数据规模超大 易用性强,支持标准sql 性能强,查询数据快 | 需要依赖hadoop生态 仅支持聚合查·询 不支持adhoc查询 不支持join和对数据的更新 | 高 | SQL标准 | 局限 | 高 | MOLAP |
Doris | GooleMesa+Apache Impa+ORCFile/Parquet 主键更新 支持Rollup Table 高并发和高通图的Ad-hoc查询 支持聚合+明细数据查询 无外部系统依赖 | 成熟度不够 | 低 | 兼容mysql访问协议 | 全面 | 低 | HOLAP |
1.3使用场景
- 报表分析
- 实时看板 (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、Hbase、Phoenix 组成的旧架构,架构大大简化。
- 数据湖联邦查询:通过外表的方式联邦分析位于 Hive、Hudi 中的数据,在避免数据拷贝的前提下,查询性能大幅提升
1.5架构
Doris 的架构很简洁,只设 FE(Frontend)前端进程、BE(Backend)后端进程两种角色、两个后台的服务进程,不依赖于外部组件,方便部署和运维,FE、BE 都可在线性扩展。
- FE(Frontend):存储、维护集群元数据;负责接收、解析查询请求,规划查询计划,调度查询执行,返回查询结果。主要有三个角色:
- Leader 和 Follower:主要是用来达到元数据的高可用,保证单节点宕机的情况下,元数据能够实时地在线恢复,而不影响整个服务。
- Observer:用来扩展查询节点,同时起到元数据备份的作用。如果在发现集群压力非常大的情况下,需要去扩展整个查询的能力,那么可以加 observer 的节点。observer 不参与任何的写入,只参与读取。
- BE(Backend):负责物理数据的存储和计算;依据 FE 生成的物理计划,分布式地执行查询。数据的可靠性由 BE 保证,BE 会对整个数据存储多副本或者是三副本。副本数可根据需求动态调整。
- MySQL Client:Doris 借助 MySQL 协议,用户使用任意 MySQL 的 ODBC/JDBC 以及 MySQL 的客户端,都可以直接访问 Doris。
- Broker:一个独立的无状态进程。封装了文件系统接口,提供 Doris 读取远端存储系统中文件的能力,包括 HDFS,S3,BOS 等。
1.6默认端口
实例名称 | 端口名称 | 默认端口 | 通讯方向 | 说明 |
BE | be_port | 9060 | FE-->BE | BE 上 thrift server 的端口,用于接收来自 FE 的请求 |
BE | webserver_port | 8040 | BE<-->FE | BE 上的 http server 端口 |
BE | heartbeat_service_port | 9050 | FE-->BE | BE 上心跳服务端口,用于接收来自 FE 的心跳 |
BE | brpc_prot* | 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 上 thirft server 端口 |
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,用于接收请求 |
2.安装
2.1安装前准备
- Linux 操作系统版本需求
- 软件需求
- 测试环境硬件配置需求
- 生产环境硬件配置需求
- 操作系统环境要求
设置系统最大文件打开句柄数 ==>启动一个程序的时候,打开文件的数量就是句柄数
Plain Text |
关闭交换分区(swap)
交换分区是linux用来当做虚拟内存用的磁盘分区;
linux可以把一块磁盘分区当做内存来使用(虚拟内存、交换分区);
Linux使用交换分区会给Doris带来很严重的性能问题,建议在安装之前禁用交换分区;
Shell |
注意事项:
|
2.2安装FE
- 去官网下载源码包,官网地址:https://doris.apache.org
根据自己的配置选择性点击下载
- 上传到linux
- 解压
- 修改配置文件
Shell |
- 分发集群
Shell |
- 启动
Shell |
生产环境强烈建议单独指定目录不要放在 Doris 安装目录下,最好是单独的磁盘(如果有 SSD 最好)。 |
2.3安装BE
进入到be的conf目录下修改配置文件
Shell |
注意事项: storage_root_path 默认在 be/storage 下,需要手动创建该目录。多个路径之间使用英文状 态的分号;分隔(最后一个目录后不要加)。 可以通过路径区别存储目录的介质,HDD 或 SSD。可以添加容量限制在每个路径的末 尾,通过英文状态逗号,隔开,如: storage_root_path=/home/disk1/doris.HDD,50;/home/disk2/doris.SSD,10;/home/disk2/doris 说明: /home/disk1/doris.HDD,50,表示存储限制为 50GB,HDD; /home/disk2/doris.SSD,10,存储限制为 10GB,SSD; /home/disk2/doris,存储限制为磁盘最大容量,默认为 HDD 关于Centos 添加新硬盘,分区格式化、挂载硬盘文档: Centos 添加新硬盘,分区格式化、挂载硬盘 |
因为FE和BE两个都是单独的个体,所以他俩相互间还不认识,就需要我们通过mysql的客户端将他们建立起联系
如果没有装mysql的家伙,记得先装mysql
安装mysql
使用 MySQL Client 连接 FE
SQL |
fe启动完成后可以查看fe的运行状态
SQL |
添加 BE 节点
SQL |
查看 BE 状态
SQL |
添加环境变量
Shell |
启动BE
SQL |
2.4部署 FS_Broker(可选)
Broker 以插件的形式,独立于 Doris 部署。如果需要从第三方存储系统导入数据,需要部署相应的 Broker,默认提供了读取 HDFS、百度云 BOS 及 Amazon S3 的 fs_broker。fs_broker 是无状态的,建议每一个 FE 和 BE 节点都部署一个 Broker。
启动 Broker
SQL |
使用 mysql-client 连接启动的 FE,执行以下命令:
SQL |
查看 Broker 状态
SQL |
2.5扩容和缩容
2.5.1 FE 扩容和缩容
可以通过将 FE 扩容至 3 个以上节点来实现 FE 的高可用。
使用 MySQL 登录客户端后,可以使用 sql 命令查看 FE 状态,目前就一台 FE
SQL |
添加FE的新节点:
FE 分为 Leader,Follower 和 Observer 三种角色。 默认一个集群,只能有一个 Leader,可以有多个 Follower 和 Observer。其中 Leader 和 Follower 组成一个 Paxos 选择组,如果Leader 宕机,则剩下的 Follower 会自动选出新的 Leader,保证写入高可用。Observer 同步 Leader 的数据,但是不参加选举。
如果只部署一个 FE,则 FE 默认就是 Leader。在此基础上,可以添加若干 Follower 和 Observer。
SQL |
在linux02和linux03上分别启动FE节点
SQL |
此时你再去查看FE的状态就发现有3台啦
SQL |
删除FE节点命令
SQL |
注意:删除 Follower FE 时,确保最终剩余的 Follower(包括 Leader)节点最好为奇数。 |
2.5.2 BE 扩容和缩容
增加 BE 节点
SQL |
DROP 方式删除 BE 节点(不推荐)
SQL |
注意:DROP BACKEND 会直接删除该 BE,并且其上的数据将不能再恢复!!!所以我们强烈不推荐使用 DROP BACKEND 这种方式删除 BE 节点。当你使用这个语句时,会有对应的防误操作提示。 |
DECOMMISSION 方式删除 BE 节点(推荐)
SQL |
|
2.5.3 Broker 扩容缩容
Broker 实例的数量没有硬性要求。通常每台物理机部署一个即可。Broker 的添加和删除可以通过以下命令完成:
SQL |
Broker 是无状态的进程,可以随意启停。当然,停止后,正在其上运行的作业会失败,重试即可。
第 3 章 数据表设计
3.1字段类型
TINYINT | 1 字节 | 范围:-2^7 + 1 ~ 2^7 - 1 |
SMALLINT | 2 字节 | 范围:-2^15 + 1 ~ 2^15 - 1 |
INT | 4 字节 | 范围:-2^31 + 1 ~ 2^31 - 1 |
BIGINT | 8 字节 | 范围:-2^63 + 1 ~ 2^63 - 1 |
LARGEINT | 16 字节 | 范围:-2^127 + 1 ~ 2^127 - 1 |
FLOAT | 4 字节 | 支持科学计数法 |
DOUBLE | 12 字节 | 支持科学计数法 |
DECIMAL[(precision, scale)] | 16 字节 | 保证精度的小数类型。默认是DECIMAL(10, 0) ,precision: 1 ~ 27 ,scale: 0 ~ 9,其中整数部分为 1 ~ 18,不支持科学计数法 |
DATE | 3 字节 | 范围:0000-01-01 ~ 9999-12-31 |
DATETIME | 8 字节 | 范围:0000-01-01 00:00:00 ~ 9999-12-31 23:59:59 |
CHAR[(length)] | 定长字符串。长度范围:1 ~ 255。默认为 1 | |
VARCHAR[(length)] | 变长字符串。长度范围:1 ~ 65533 | |
BOOLEAN | 与 TINYINT 一样,0 代表 false,1 代表 true | |
HLL | 1~16385 个字节 | hll 列类型,不需要指定长度和默认值,长度根据数据的聚合程度系统内控制,并且 HLL 列只能通过 配套的hll_union_agg、Hll_cardinality、hll_hash 进行查询或使用 |
BITMAP | bitmap 列类型,不需要指定长度和默认值。表示整型的集合,元素最大支持到 2^64 - 1 | |
STRING | 变长字符串,0.15 版本支持,最大支持 2147483643 字节(2GB-4),长度还受 be 配置`string_type_soft_limit`, 实际能存储的最大长度取两者最小值。只能用在 value 列,不能用在 key列和分区、分桶列 |
相关文章:

Apache Doris
Apache Doris教程 1.Doris 简介 1.1 Doris 概述 Apache Doris 由百度大数据部研发(之前叫百度 Palo,2018 年贡献到 Apache 社区后, 更名为 Doris ),在百度内部,有超过 200 个产品线在使用,…...

GB28181 对接海康平台,解决音视频卡顿问题
GB28181 对接海康平台,解决音视频卡顿问题 一、概述二、问题分析1、设备对比分析2、抓包对比分析3、验证分析结果三、总结四、讨论一、概述 设备使用GB28181协议对接海康平台时,发现音频和视频存在卡顿现象,不是一直卡顿,有时候卡有时候不卡,但是卡顿的时候音视频一起卡顿…...
Linux系统编程面试题
1. 什么是系统调用?它与普通函数调用有什么不同? 系统调用和普通函数调用的区别在于它们执行的上下文和权限不同。系统调用是操作系统内核提供的一组接口,允许用户程序请求操作系统执行特权操作,例如打开或关闭文件、创建新进程等…...

计算机网络 - 网络层的数据平面
Overview 首先Network Layer负责的是host to host的传输, 然后可以分为两个平面, 控制平面以及数据平面. 数据平面: 负责forward datagrams from input to output links 决定路由器从input到output 转发功能: 基于目标地址 转发表 SDN方式基于多个字段流表 控制平面: 调…...

《Spring Guides系列学习》guide41 - guide45
要想全面快速学习Spring的内容,最好的方法肯定是先去Spring官网去查阅文档,在Spring官网中找到了适合新手了解的官网Guides,一共68篇,打算全部过一遍,能尽量全面的了解Spring框架的每个特性和功能。 接着上篇看过的gu…...

数据库基础——1.数据库概述
从这篇文章我们开始学习数据库的相关知识 目录 1.为什么要使用数据库 2.数据库与数据库管理系统 2.1相关概念 2.2数据库与数据库管理系统的关系 编辑2.3常见的数据库管理系统 2.4常见的数据库介绍 3.MySQL介绍 3.1概述 3.2关于MySQL8.0 3.3 Oracle vs MySQL 4.RD…...

2023 光亚展|乐鑫将携 AI、Wi-Fi 6、私有云和 Matter 方案精彩亮相
2023 广州国际照明展览会(光亚展)将于 6 月 9 至 12 日在广州琶洲展馆启幕。本届展会以“光未来”为主题,畅想未来生活方式的无限可能。乐鑫科技 (688018.SH) 将在 B 区 9.2 号厅 D55 展位,带来具有前瞻性的智能照明解决方案和实体…...

用反射设计通用的实例化对象方案
需求 对象的相关信息存储在javabean.properties文件中,通过读取properties文件中的信息,实例化对象,要求程序不能硬编码,即程序可以通用,针对不同的对象,都可以实例化。仅需修改配置文件,不需要…...

破坏单例模式--存在的问题---问题的解决
目录 破坏单例模式--存在的问题---问题的解决 问题演示 破坏单例模式: 序列化 反射 序列化反序列化: 代码: 运行结果: 反射 代码: 运行结果: 问题的解决 序列化、反序列方式破坏单例模式的解…...

SpringCloud微服务踩坑系列-java.lang.IllegalStateException
异常如下: 2023-05-24 08:47:10.764 ERROR 118400 --- [nio-8084-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exceptio…...

Linux-地址空间
文章目录 问题引入操作系统宏观认识操作系统与进程程序地址空间进程地址空间问题解释 问题引入 在Linux操作系统中、vim编译器下,出现了变量同地址但不同值的现象。 下面以解释该现象产生的原因为主线,在过程中学习Linux操作系统的知识。 运行代码展示…...

【EKS】基于Amazon EKS搭建kubernetes集群
文章目录 前言 | 亚马逊云科技 re:Invent前沿资讯一、介绍篇🎨什么是AWS 云计算什么是Amazon EKS 二、部署篇🔨1、创建集群VPC2、创建集群子网3、创建IGW网关4、创建路由表与子网绑定5、EKS集群创建6、创建kubeconfig配置文件7、添加计算节点组8、查看EK…...

Tomcat安装与启动和配置
目录 Tomcat 简介 Tomcat 安装 Tomcat 启动和配置 文件夹作用 启动,关闭Tomcat; 常见问题 配置 环境变量 IDEA中配置Tomcat Tomcat 简介 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在…...

ruoyi-vue版本(十八)创建自己的项目,使用若依里面的技术,多数据源的实现
目录 1 创建自己的项目2 连接MySQL数据库(多数据源)2.1 若依实现多数据源2.1.1 主要思想2.2 第三方的依赖的实现1 创建自己的项目 1 创建一个空文件夹 2 idea 里面创建项目...

C++-stack题型->最小栈,栈的压入与弹出,逆波兰表达式
目录 最小栈 栈的压入与弹出 逆波兰表达式 最小栈 155. 最小栈 - 力扣(Leetcode) 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void …...

【计算机网络实验】BGP和OSPF协议仿真实验
实验内容 BGP和OSPF协议仿真实验 实验目的 (1)学习BGP协议的配置方法; (2)验证BGP协议的工作原理; (3)掌握网络自治系统的划分方法; (4)验证…...

提升日期处理效率:day.js 实战经验分享
theme: smartblue 本文简介 点赞 关注 收藏 学会了 本文主要介绍我在工作中使用 day.js 较多的方法。本文并不能代替 day.js 官方文档,日常工作中该查文档的还是要查文档。本文是写给刚接触 day.js 的工友,让这部分工友能更顺利上手 day.js。本文不涉…...

mysql中的count(1)、count(*)、count(id)哪个更快?
今天和大家聊一下mysql中的count()方法 我们日常开发中,经常会用到count()命令,有的人用count(*),有的人用count(1),还有的人用count(id),那么这几种写法都有什么区别呢?哪种方法效率更高呢?今…...
cf1750E Bracket Cost
前言: 好久没训练了,来做道计数题找找感觉。**期末毁我青春 大意: 定义对于一个括号串 s的值,为通过最小次数以下操作使 s 实现括号匹配的操作次数。 选择一个子串,循环右移一位。在任意一个位置插入一个任意括号。 求一个括…...

Vue+springboot医院住院挂号登记收费系统7ui9s
医院信息管理系统的开发过程中,采用B / S架构,主要使用java语言进行开发,结合最新流行的springboot框架。使用Mysql数据库和idea开发环境。该医院信息管理系统包括用户、医生和管理员。其主要功能包括用户管理、医生管理、医生信息管理、预约…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...

P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...

ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...

JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...

DBLP数据库是什么?
DBLP(Digital Bibliography & Library Project)Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高,数据库文献更新速度很快,很好地反映了国际计算机科学学术研…...

[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG
TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码:HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...