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模型的表,并自动指定排序列。

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

InSAR形变监测方法与研究进展(朱建军,中南大学)

文章目录 摘要引言InSARInSAR原理SAR卫星 InSAR监测技术D-InSARMT-InSARPS-InSARSBAS-InSARDS-InSAR(Distributed Scatterer InSAR)MAI(Multi-Aperture InSAR, 多孔径InSAR) InSAR形变监测应用与发展城市沉降监测矿山形变监测地震…

深度探究深度学习常见数据类型INT8 FP32 FP16的区别即优缺点

定点和浮点都是数值的表示(representation),它们区别在于,将整数(integer)部分和小数(fractional)部分分开的点,点在哪里。定点保留特定位数整数和小数,而浮点…

SpringBoot学习(黑马程序员day12)

1jwt令牌 JWT的组成: (JWT令牌由三个部分组成,三个部分之间使用英文的点来分割) 第一部分:Header(头), 记录令牌类型、签名算法等。 例如: {"alg":"HS256",&qu…

【已解决】ModuleNotFoundError: No module named ‘matplotlib‘

问题描述 Traceback (most recent call last): File "/home/visionx/nickle/temp/SimCLR/linear_evaluation.py", line 207, in <module> import matplotlib.pyplot as plt ModuleNotFoundError: No module named matplotlib 解决办法 pip install matp…

嵌入式软件开发是个啥职业?

在硬件行业中&#xff0c;有一类工作岗位是更偏向软件的&#xff0c;或者说是软硬结合非常紧密的工作&#xff0c;那就是嵌入式开发工程师。 说起嵌入式&#xff0c;可能很多没有接触过电子类的人没有听说这些东西。 其实简单来说&#xff0c;嵌入式开发就是写程序去控制硬件电…

HBuilderX vue项目打包上传到服务器

完成后有个’dist’目录,把真个目录通过FTP 上传到服务器,Mac电脑使用cyberduck 上传 服务器使用‘宝塔’进行一件部署,基本上就是傻瓜式的点击下一步

MySQL数据库实验记录

输入密码 显示数据库 mysql命令以分号;结束 创建数据库 建表 写错了就会报错 没选数据库也会报错

十五、信号量

1、概述 (1)前面介绍的队列(queue)可以用于传输数据&#xff1a;在任务之间、任务和中断之间。 (2)有些时候我们只需要传递状态&#xff0c;并不需要传递具体的信息&#xff0c;比如&#xff1a; 我的事做完了&#xff0c;通知一下你。卖包子了、卖包子了&#xff0c;做好了…

软件过程模型分析与适应场景: 瀑布、原型、增量、螺旋、组件化和统一模型简介

软件过程模型&#xff1a; 瀑布模型 ​ 有很强的前后关联性&#xff0c;前一阶段的输出是后一阶段的输入&#xff0c;而且不可回溯性。 适应场景&#xff1a; ​ 软件开发人员经验丰富​ 需求变化少&#xff0c;变更少&#xff0c;可以一次性获取全部需求​ 项目风险低&…

专用博客模板

【点我-这里送书】 本人详解 作者&#xff1a;王文峰&#xff0c;参加过 CSDN 2020年度博客之星&#xff0c;《Java王大师王天师》 公众号&#xff1a;JAVA开发王大师&#xff0c;专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生&#xff0c;期待你的…

Docker实用篇

Docker实用篇 0.学习目标 1.初识Docker 1.1.什么是Docker 微服务虽然具备各种各样的优势&#xff0c;但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中&#xff0c;依赖的组件非常多&#xff0c;不同组件之间部署时往往会产生一些冲突。在数百上千台服务中重复部署…

六:ffmpe音频参数的使用

-aframes 设置要输出的音频帧数 -b:a 设置音频码率 -ar 设定采样率 -ac 设定声音的Channel数 -acodec 设定声音的编解码器&#xff0c;如果用copy标识原始编解码数据必须被copy -an 不处理音频 -af 音频过滤器 写笔记前查阅了其它说明&#xff0c; -aframes&#xff1a;等价…

海康威视嵌入式软件一面(技术面)

海康威视技术面试大部分都是基础问题和牛客上的问题&#xff0c;最后还有手撕代码部分也是牛客原题&#xff0c;总体中等偏难。 一、问答题 1.什么是野指针&#xff0c;野指针如何形成 【C语言基础】野指针与空指针_野指针和空指针-CSDN博客 2.const和static作用和区别 sta…

微信小程序隐私政策不合规,应当由用户自主阅读后自行选择是否同意隐私政策协议,不得默认强制用户同意

小程序隐私政策不合规&#xff0c;默认自动同意《用户服务协议》及《隐私政策》&#xff0c;应当由用户自主阅读后自行选择是否同意隐私政策协议&#xff0c;不得默认强制用户同意&#xff0c;请整改后再重新提交。 把 登录代表同意《用户协议》和《隐私政策》 改为 同意《用…

Socket编程

1. 什么是Socket 为了应用层和传输层能够交互&#xff0c;操作系统提供一些API给应用层&#xff0c;这些API可以把应用层的数据交给传输层&#xff0c;而这些API就是socket。传输层中有很多协议&#xff0c;其中知名的就是TCP和UDP&#xff0c;因此操作系统提供了两个版本的AP…

Windows10腾讯文档下载和安装

文章目录 Windows10腾讯文档下载和安装官网下载执行安装 Windows10腾讯文档下载和安装 官网下载 官网 下载后&#xff1a; 执行安装 找到下载目录 安装后打开 扫描登录即可

Clickhouse学习笔记(9)—— 语法优化

ClickHouse 的 SQL 优化规则是基于 RBO(Rule Based Optimization&#xff09;实现的 官方数据集的使用 为了方便测试CK的语法优化规则&#xff0c;尝试使用官方提供的数据集&#xff1b; 需要使用的数据集是visits_v1和hints_v1&#xff1a; Anonymized Web Analytics Data …

【大模型】大语言模型语料下载

文章目录 概述Hugging Faceobs操作git-lfs例子RedPajama-Data-1TSlimPajama-627B/git clone续传 数据格式参考资料 概述 大模型训练中语料是非常重要的&#xff0c;目前公网上有各种各样的语料可以供下载&#xff0c;但是不可能每个用户、每次训练任务都通过公网去拉取语料&am…

SparkSQL之Rule体系

在Unresolved LogicalPlan逻辑算子树的操作&#xff08;如绑定、解析、优化等&#xff09;中&#xff0c;主要方法都是基于规则&#xff08;Rule&#xff09;的&#xff0c;通过Scala语言模式匹配机制&#xff08;Pattern-match&#xff09;进行树结构的转换或节点改写。Rule是…