Doris学习--1、Doris简介、操作Doris、Doris架构(数据模型)

在这里插入图片描述
                       星光下的赶路人star的个人主页

                      心之所向,剑之所往

文章目录

  • 1、Doris简介
    • 1.1 快速开始
    • 1.2 安装配置
      • 1.2.1 应知前提
      • 1.2.2 配置Doris
        • 1.2.2.0 配置前提
        • 1.2.2.1 配置FE(Frontend)
        • 1.2.2.2 启动FE
        • 1.2.2.3 连接FE
        • 1.2.2.4 停止FE
        • 1.2.2.5 配置BE(Backend)
        • 1.2.2.6 启动BE
  • 2、操作Doris
    • 2.1 创建表
    • 2.2 导入数据
  • 3、 端口小总结
  • 4、 利用MySQL客户端连接Doris的原理
  • 5、 Doris架构
    • 5.1 Doris处理任务的流程
    • 5.2 数据模型
      • 5.2.1 Aggregate模型
      • 5.2.2 Unique模型
        • 5.2.2.1 读时合并
        • 5.2.2.2 写时合并
        • 5.2.3 Duplicate模型
        • 5.2.4 无排序的Duplicate模型

1、Doris简介

1.1 快速开始

Apache Doris是基于MPP(Massively Parallel Processing大规模并行处理)架构的高性能、实时分析性数据库,以极速易用的特点被人熟知,仅仅需亚秒级响应时间即可返回海量数据下的查询结果,不仅可以支持高并发的点查询场景,也能支持高吞吐的复杂分析场景。基于此,Apache Doris 能够较好的满足报表分析即席查询统一数仓构建数据湖联邦查询加速等使用场景,用户可以在此之上构建用户行为分析、AB 实验平台、日志检索分析、用户画像分析、订单分析等应用。

1.2 安装配置

1.2.1 应知前提

​ 1、Doris是运行在Linux环境中,推荐CentOS 7.x 或者 Ubuntu 16.04 以上版本,同时你需要安装 Java 运行环境(JDK版本要求为8)。

​ 2、Doris没有可以直接安装安装包,是二进制的版本,因为有部分组件是利用C++写的,要进行编译之后才能安装。

1.2.2 配置Doris

1.2.2.0 配置前提

1、获取二进制安装包(自行去官网下载)。
2、利用 tar xf 解压二进制安装包到自己的目录下(要记住,等下要用)。

1.2.2.1 配置FE(Frontend)

0、进入到安装包目录下的fe目录下的conf目录下(这里就是有FE组件的配置文件fe.conf)。

​1、添加priority_networks参数(默认值是0.0.0.0 就是所有客户端都可以访问)

​ priority_networks=172.23.16.0/24。

​ 作用:只接受该网段的ip访问,可以提高集群的安全性。

​ 2、 添加元数据目录(默认是FE 安装目录下的 doris-meta)

​ meta_dir=/path/your/doris-meta。

​ 作用:配置你自己想要的位置。

​ 注意:如果需要自己设置元数据的目录,在启动fe之前要保证目录已经存在。

1.2.2.2 启动FE
单点启动	       .bin/start_fe.sh --deamon

​ 查看运行状态(命令行模式) curl http://127.0.0.1:8030/api/bootstrap 这里的IP和端口分别是FE的IP和http_port(默认是8030) 如果返回结果中带有 "msg":"success" 字样,则说明启动成功。

​ 查看运行状态(Web UI) 在浏览器中输入地址http:// fe_ip:8030(fe_ip指的是fe所在的节点)

1.2.2.3 连接FE

0、连接前提

​ 下载一个MySQL客户端

​ 1、连接FE

​ 执行以下命令连接Doris mysql uroot -p9030 -h127.0.0.1

​ 注意:

​ (1)这里使用的root用户是doris内置的默认用户,也是超级管理员用户。

​ (2)-P:这里我们连接Doris的查询端口,默认端口就是9030,对应的是fe.conf里的query_port。

​ (3)-h:指的是连接FE的ip地址。

​ (4)mysql -uroot -P9030 -h127.0.0.1mysql --ssl-mode=PREFERRED -uroot -P9030 -h127.0.0.1一样,都是一开始试图建立SSL加密连接,如果失败,则尝试使用普通连接。

​ (5)-ssl-mode参数是mysql5.7.11版本引入的。

​ 2、查看FE运行状态

show frontends\G;

​ 如果结果中IsMaster、join、Alive三列均为true,则表示节点正常。

1.2.2.4 停止FE
单点停止	`./bin/stop_fe.sh --daemon`
1.2.2.5 配置BE(Backend)

和FE配置类似

​ 1、配置priority_networks 参数

​ 2、配置BE数据储存目录

​ 3、配置JAVA_HOME环境变量

​ 由于从 1.2 版本开始支持 Java UDF 函数,BE 依赖于 Java 环境。所以要预先配置

​ 4、安装JAVA UDF函数

​ 安装Java UDF 函数因为从1.2 版本开始支持Java UDF 函数,需要从官网下载 Java UDF 函数的 JAR 包放到 BE 的 lib 目录下,否则可能会启动失败。

1.2.2.6 启动BE

1、在 BE 安装目录下执行下面的命令,来完成 BE 的启动。

./bin/start_be.sh --daemon

​ 2、添加BE节点到集群

​ 通过MySQL 客户端连接到 FE 之后执行下面的 SQL,将 BE 添加到集群中

alter System add Backend "be_host_ip:heartbeat_service_port;

​ 1、be_host_ip:这里指的是BE的IP地址和你在 be.conf 里的 priority_networks 匹配

​ 2、heartbeat_service_port:这里是你 BE 的心跳上报端口,和你在 be.conf 里的 heartbeat_service_port 匹配,默认是 9050

​ 3、查看BE运行状态

​ 可以在 MySQL 命令行下执行下面的命令查看 BE 的运行状态。

​ *SHOW* BACKENDS\G

​ 4、停止BE节点

./bin/stop_be.sh

2、操作Doris

2.1 创建表

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 (#表示用默认的标签分配副本,并且副本数为1"replication_allocation" = "tag.location.default: 1"
);

2.2 导入数据

curl  --location-trusted -u admin: -T /home/zhm/test.csv -H "column_separator:," http://127.0.0.1:7030/api/zhm/example_tbl/_stream_load

curl 是一个开源的命令行工具,可以用来和服务器进行数据交互,支持多种协议,如HTTP、FTP等。

--location-trusted 参数表示在HTTP重定向时自动执行跳转。如果目标URL是HTTPS协议,则不会验证证书。

-u 参数用于指定进行HTTP认证所使用的用户名和密码,格式为 username:password。这里指定的用户名是 admin,密码为空。

-T 参数表示使用PUT方法上传本地文件到服务器。这里指定的本地文件路径是 /home/zhm/test.csv,即要上传的文件是 test.csv

-H 参数用于指定HTTP请求头信息。这里指定了一个名为 column_separator 的请求头,值为 ,。该请求头的作用是指定上传的CSV文件中的列分隔符。

​ 最后一个参数是需要访问的URL地址,它由三部分组成:主机名、端口号和API路径。其中,http://127.0.0.1:7030 表示主机名和端口号,/api/zhm/example_tbl/_stream_load 则表示API路径。该API用于将上传的CSV文件以流的方式加载到名为 example_tbl 的表中。

3、 端口小总结

端口号作用
8030FE的Web UI端口
9030MySQL客户端连接Doris的端口号
9050BE心跳上报端口号

4、 利用MySQL客户端连接Doris的原理

0、MySQL客户端连接Doris是基于MySQL协议来实现的。Doris实现了MySQL的通信协议。

1、MySQL客户端与Doris的交互过程中可概括为以下几个步骤

​ a、客户端发起请求连接。MySQL客户端向Doris的FE节点发起连接请求,并提供连接所需的参数(主机名、端口号、用户名和密码

​ b、FE节点进行身份验证并将请求转发给BE节点。FE节点首先对客户端提供的用户名和密码进行验证,如果验证通过,则将请求转发给BE节点

​ c、BE节点处理请求。BE节点接收到请求后,根据请求的类型(例如查询、插入、修改等),从存储引擎中获取或写入数据,并将节点返回给FE节点

​ 这里讲的储存引擎是Palo

​ Palo的优点

​ 1、列式存储

​ 2、基于副本的高可用

​ 3、分布式架构

​ 4、混合储存模式

​ Palo的缺点

​ 1、生态系统比较小

​ 2、事务支持有限

​ 事务的四大特性(ACID)

​ a、原子性:原子性是指事务是一个不可分割的操作单元,要么全部执行成功,要么全部回滚到初始状态。如果事务中的任何操作失败,整个事务将被回滚,所有已经进行的操作都将被撤销,使数据保持一致性。

​ b、一致性:致性指的是事务在执行前后,数据必须满足定义的完整性约束。事务的执行不应导致数据的矛盾或破坏数据库的完整性规则。换句话说,事务应该将数据库从一个一致状态转变为另一个一致状态。

​ c、隔离性:隔离性指的是并发执行的事务之间应该相互隔离,彼此无法感知对方的存在。每个事务应该像在独立执行的环境中一样,不受其他事务的干扰。这样可以避免并发执行时产生的问题,如脏读、不可重复读和幻读。

​ d、持久性:持久性表示一旦事务提交,其所做的改变将永久保存在数据库中,并且是可恢复的。即使系统发生故障或重启,事务提交的结果也不应该丢失。

​ 3、存储和计算耦合

​ d、FE节点返回结果。FE节点接收到BE节点返回的结果后,将结果返回给客户端

注意:在连接Doris时,MySQL客户端要按照Doris所支持的MySQL版本进行设置。例如,如果Doris支持的MySQL版本是5.7,则MySQL客户端应该使用相应版本的协议来连接Doris。

5、 Doris架构

在这里插入图片描述
1、Frontend(FE):主要负责用户请求的接入、查询解析规划、元数据的管理、节点管理的相关工作。

​ 2、Backend(BE):主要负责数据的存储、查询计划的执行。

这两类进程都是可以横向扩展的,单集群可以支持到数百台机器,数十PB的存储容量。并且这两类进程通过一致性协议来保证服务的高可用和数据的高可靠。这种高度集成的架构设计极大的降低了一款分布式系统的运维成本。

5.1 Doris处理任务的流程

1、用户提交一个任务到FE
2、FE将任务分成若干个Task,每个Task负责处理指定的一部分数据
3、Task被分配到指定的BE上运行。在BE上,每个Task被视为一个普通的导入任务,通过Stream Load的导入机制进行数据处理
4、BE处理完成之后,向FE反馈处理结果
5、FE根据反馈结果,继续生存后续新的Task,或者对失败的Task进行重试。
6、整个任务处理过程通过不断的产生新的Task,来完成源源不断的数据处理。

5.2 数据模型

在Doris中,数据以表的形式进行逻辑上的描述。一张表包括行和列。Row 即用户的一行数据。Column 用于描述一行数据中不同的字段。
Column可以分为两大类:Key和Value。从业务角度看,key和Value可以分别对应维度列指标列。Doris的Key列是建表语句中指定的列,建表语句中的关键字’unique key’或’aggregate key’或’duplicate key’后面的列就是 Key 列,除了Key列剩下的就是Value列。

5.2.1 Aggregate模型

CREATE TABLE IF NOT EXISTS example_db.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 "用户最小停留时间"
)
# key键
AGGREGATE KEY(`user_id`, `date`, `city`, `age`, `sex`)
#根据user_id进行分桶
DISTRIBUTED BY HASH(`user_id`) BUCKETS 1
PROPERTIES (#数据副本为1
"replication_allocation" = "tag.location.default: 1"
);
聚合关键字作用
sum求和
repalce替换
max最大值
min最小值

可以看出,这个建表语句,导入数据之后,明细数据会丢失,如果想保存明细数据,需要修改表的结构,增加了一列 timestamp,记录精确到秒的数据灌入时间。 同时,将AGGREGATE KEY设置为AGGREGATE KEY(user_id, date, timestamp, city, age, sex)。

5.2.2 Unique模型

在某些多维分析场景下,为了保证 Key 的唯一性,即如何获得 Primary Key 唯一性约束。所以,有了 Unique 数据模型。

5.2.2.1 读时合并
CREATE TABLE IF NOT EXISTS example_db.example_tbl
(`user_id` LARGEINT NOT NULL COMMENT "用户id",`username` VARCHAR(50) NOT NULL COMMENT "用户昵称",`city` VARCHAR(20) COMMENT "用户所在城市",`age` SMALLINT COMMENT "用户年龄",`sex` TINYINT COMMENT "用户性别",`phone` LARGEINT COMMENT "用户电话",`address` VARCHAR(500) COMMENT "用户地址",`register_time` DATETIME COMMENT "用户注册时间"
)
UNIQUE KEY(`user_id`, `username`)
DISTRIBUTED BY HASH(`user_id`) BUCKETS 1
PROPERTIES (
"replication_allocation" = "tag.location.default: 1"
);

其实这个读时合并的内部实现方式和数据存储方式和聚合模型中的Replace方式是一样的。

5.2.2.2 写时合并

Unqiue模型的写时合并实现与聚合模型就是完全不同的两种模型了,查询性能更接近于duplicate模型,在有主键约束需求的场景上相比聚合模型有较大的查询性能优势,尤其是在聚合查询以及需要用索引过滤大量数据的查询中。

CREATE TABLE IF NOT EXISTS example_db.example_tbl
(`user_id` LARGEINT NOT NULL COMMENT "用户id",`username` VARCHAR(50) NOT NULL COMMENT "用户昵称",`city` VARCHAR(20) COMMENT "用户所在城市",`age` SMALLINT COMMENT "用户年龄",`sex` TINYINT COMMENT "用户性别",`phone` LARGEINT COMMENT "用户电话",`address` VARCHAR(500) COMMENT "用户地址",`register_time` DATETIME COMMENT "用户注册时间"
)
UNIQUE KEY(`user_id`, `username`)
DISTRIBUTED BY HASH(`user_id`) BUCKETS 1
PROPERTIES (
"replication_allocation" = "tag.location.default: 1",
"enable_unique_key_merge_on_write" = "true"
);

在开启了写时合并选项的Unique表上,数据在导入阶段就会去将覆盖和被更新的数据进行标记和删除,同时将新的数据写入到新的文件。在查询的时候,所有被标记删除的数据都会在文件级别被过滤掉,读取出来的数据就是最新的数据,消除掉了读时合并中的数据聚合过程,并且能够在很多情况下支持多种谓词下推。因此在许多场景能够带来较大的性能提升,尤其是在有聚合查询的情况下。

5.2.3 Duplicate模型

在某些多维分析场景下,数据既没有主键,也没有聚合需求。

CREATE TABLE IF NOT EXISTS example_db.example_tbl
(`timestamp` DATETIME NOT NULL COMMENT "日志时间",`type` INT NOT NULL COMMENT "日志类型",`error_code` INT COMMENT "错误码",`error_msg` VARCHAR(1024) COMMENT "错误详细信息",`op_id` BIGINT COMMENT "负责人id",`op_time` DATETIME COMMENT "处理时间"
)
DUPLICATE KEY(`timestamp`, `type`, `error_code`)
DISTRIBUTED BY HASH(`type`) BUCKETS 1
PROPERTIES (
"replication_allocation" = "tag.location.default: 1"
);

这种数据模型区别于 Aggregate 和 Unique 模型。数据完全按照导入文件中的数据进行存储,不会有任何聚合。即使两行数据完全相同,也都会保留。 而在建表语句中指定的 DUPLICATE KEY,只是用来指明底层数据按照那些列进行排序。

5.2.4 无排序的Duplicate模型

当创建表的时候没有指定Unique、Aggregate或Duplicate时,会默认创建一个Duplicate模型的表,并自动指定排序列。

在这里插入图片描述
                      您的支持是我创作的无限动力

在这里插入图片描述
                      希望我能为您的未来尽绵薄之力

在这里插入图片描述
                      如有错误,谢谢指正;若有收获,谢谢赞美

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

物联网水表电子阀工作原理是怎样的?

随着科技的不断发展,物联网技术逐渐深入到我们的生活之中。作为智能家居的重要组成部分,物联网水表电子阀凭借其智能化、节能环保等优势,受到了越来越多用户的青睐。接下来,合众小编将来为大家介绍下物联网水表电子阀工作原理。 一…

Git 进阶使用

一. Git图形化操作 1.1.什么是图形化管理工具 图形化管理工具是一种通过可视化界面来操作计算机系统或应用程序的软件工具。在软件开发中,它通常用于管理和操作版本控制系统(如Git、SVN等)以及代码开发环境(如IDE)。与…

SSM图书管理系统开发mysql数据库web结构java编程计算机网页源码eclipse项目

一、源码特点 SSM 图书管理系统是一套完善的信息系统,结合springboot框架和bootstrap完成本系统,对理解JSP java编程开发语言有帮助系统采用SSM框架(MVC模式开发),系统具有完整的源代码和 数据库,系统主要…

(二)正点原子I.MX6ULL u-boot移植

一、概述 这里使用的是NXP官方2022.04发布的uboot,移植到正点原子阿尔法开发板(v2.1) u-boot下载:gitgithub.com:nxp-imx/uboot-imx.git 移植是基于NXP的mx6ull_14x14_evk 二、编译NXP官方uboot 进入NXP的u-boot目录 先在Makefile…

Word 插入的 Visio 图片显示为{EMBED Visio.Drawing.11} 解决方案

World中,如果我们插入了Visio图还用了Endnote, 就可能出现:{EMBED Visio.Drawing.11}问题 解决方案: 1.在相应的文字上右击,在出现的快捷菜单中单击“切换域代码”,一个一个的修复。 2.在菜单工具–>…

亚马逊云AI应用科技创新下的Amazon SageMaker使用教程

目录 Amazon SageMaker简介 Amazon SageMaker在控制台的使用 模型的各项参数 pytorch训练绘图部分代码 Amazon SageMaker简介 亚马逊SageMaker是一种完全托管的机器学习服务。借助 SageMaker,数据科学家和开发人员可以快速、轻松地构建和训练机器学习模型&#…

Apache APISIX Dashboard 未经认证访问导致 RCE(CVE-2021-45232)漏洞复现

漏洞描述 Apache APISIX 是一个动态、实时、高性能的 API 网关,而 Apache APISIX Dashboard 是一个简单易用的前端界面,用于管理 Apache APISIX。 在 2.10.1 之前的 Apache APISIX Dashboard 中,Manager API 使用了两个框架,并在…

《视觉SLAM十四讲》-- 相机与图像

04 相机与图像 4.1 相机模型 4.1.1 针孔相机模型 针孔模型描述了一束光线通过针孔后,在针孔背面投影成像的关系(类似小孔成像原理)。 根据相似三角关系 Z f − X X ′ − Y Y ′ (3-1) \frac{Z}{f}-\frac{X}{X^{\prime}}-\frac{Y}{Y^{\p…

自然语言处理(一):RNN

「循环神经网络」(Recurrent Neural Network,RNN)是一个非常经典的面向序列的模型,可以对自然语言句子或是其他时序信号进行建模。进一步讲,它只有一个物理RNN单元,但是这个RNN单元可以按照时间步骤进行展开…

HarmonyOS开发:回调实现网络的拦截

前言 上一篇文章,分享了一个基于http封装的一个网络库,里面有一个知识点,在初始化的时候,可以设置请求头拦截和请求错误后的信息的拦截,具体案例如下: Net.getInstance().init({netErrorInterceptor: new M…

C++套接字库sockpp介绍

sockpp是一个开源、简单、现代的C套接字库,地址为:https://github.com/fpagliughi/sockpp,最新发布版本为0.8.1,license为BSD-3-Clause。目前支持Linux、Windows、Mac上的IPv4、IPv6和Unix域套接字。其它*nix和POSIX系统只需很少的…

获取请求IP以及IP解析成省份

某些业务需要获取请求IP以及将IP解析成省份之类的,于是我写了一个工具类,可以直接COPY /*** IP工具类* author xxl* since 2023/11/9*/ Slf4j public class IPUtils {/*** 过滤本地地址*/public static final String LOCAL_ADDRESS "127.0.0.1&quo…

【数据结构初阶】算法的时间复杂度和空间复杂度

各位读者老爷好!现在鼠鼠我呀来浅谈一下数据结构初阶中的一个知识点:算法的时间复杂度和空间复杂度,希望对你有所帮助。 在浅谈时间复杂度和空间复杂度之前,咱们可以来了解一下一下几个概念: 1.什么是数据结构 数据结…

Http状态码502常见原因及排错思路(实战)

Http状态码502常见原因及排错思路 502表示Bad Gateway。当Nginx返回502错误时,通常表示Nginx作为代理服务器无法从上游服务器(如:我们的后端服务器地址)获取有效的响应。导致这种情况的原因有很多: 后端服务器故障ngin…

3 分钟看完 NVIDIA GPU 架构及演进

近期随着 AI 市场的爆发式增长,作为 AI 背后技术的核心之一 GPU(图形处理器)的价格也水涨船高。GPU 在人工智能中发挥着巨大的重要,特别是在计算和数据处理方面。目前生产 GPU 主流厂商其实并不多,主要就是 NVIDIA、AM…

React 递归手写流程图展示树形数据

需求 根据树的数据结构画出流程图展示,支持新增前一级、后一级、同级以及删除功能(便于标记节点,把节点数据当作label展示出来了,实际业务中跟据情况处理) 文件结构 初始数据 [{"ticketTemplateCode": &…

链表经典OJ题(链表回文结构,链表带环,链表的深拷贝)

目录 前言 1.反转一个单链表。 2. 给定一个带有头结点 head 的非空单链表,返回链表的中间结点。 3.链表的回文结构。 4.链表带环问题(*****) 4.1是否带环 4.2 入环的节点 5.随机链表的复制(链表的深拷贝) 前言…

kubernetes (k8s)的使用

一、kubernetes 简介 谷歌2014年开源的管理工具项目,简化微服务的开发和部署。 提供功能:自愈和自动伸缩、调度和发布、调用链监控、配置管理、Metrics监控、日志监控、弹性和容错、API管理、服务安全等。官网:https://kubernetes.io/zh-cn…

KubeSphere v3.4.0 部署K8S Docker + Prometheus + grafana

KubeSphere v3.4.0 部署K8S 1、整体思路2、修改linux主机名3、 离线安装3.1 问题列表3.2 执行命令成功列表 1、整体思路 将KubeSphere v3.4.0 安装包传输到其中一台机器修改Linux主机名(选取3台,修改为master01、master02、master03)安装官方…

2023-11-12 LeetCode每日一题(Range 模块)

2023-03-29每日一题 一、题目编号 715. Range 模块二、题目链接 点击跳转到题目位置 三、题目描述 Range模块是跟踪数字范围的模块。设计一个数据结构来跟踪表示为 半开区间 的范围并查询它们。 半开区间 [left, right) 表示所有 left < x < right 的实数 x 。 实…