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

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

                      心之所向,剑之所往

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

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

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

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
课程总体架构请观看89讲。数据仓库是一个面向主题的、集成的、随时间变化的、但信息本身相对稳定的数据集合,用于对管理决策过程的支持。数据仓库的应用有:1.数据分析、数据挖掘、人工智能、机器学习、风险控制、无人驾驶。2.数据化运营、精准运营。3.广告精准、智能投放等等。数据仓库是伴随着企业信息化发展起来的,在企业信息化的过程中,随着信息化工具的升级和新工具的应用,数据量变的越来越大,数据格式越来越多,决策要求越来越苛刻,数据仓库技术也在不停的发展。数据仓库有两个环节:数据仓库的构建与数据仓库的应用。随着IT技术走向互联网、移动化,数据源变得越来越丰富,在原来业  务数据库的基础上出现了非结构化数据,比如网站log,IoT设备数据,APP埋点数据等,这些数据量比以往结构化的数据大了几个量级,对ETL过程、存储都提出了更高的要求。互联网的在线特性也将业务需求推向了实时化 ,随时根据当前客户行为而调整策略变得越来越常见,比如大促过程中库存管理,运营管理等(即既有中远期策略型,也有短期操作型)。同时公司业务互联网化之后导致同时服务的客户剧增,有些情况人工难以完全处理,这就需要机器 自动决策 。比如欺诈检测和用户审核。总结来看,对数据仓库的需求可以抽象成两方面: 实时产生结果、处理和保存大量异构数据。本课程基于真实热门的互联网电商业务场景为案例讲解,结合分层理论和实战对数仓设计进行详尽的讲解,基于Flink+DorisDB实现真正的实时数仓,数据来及分析,实时报表应用。具体数仓报表应用指标包括:实时大屏分析、流量分析、订单分析、商品分析、商家分析等,数据涵盖全端(PC、移动、小程序)应用,与互联网企业大数据技术同步,让大家能够学到大数据企业级实时数据仓库的实战经验。本课程包含的技术: 开发工具为:IDEA、WebStorm Flink 1.11.3Hadoop 2.7.5Hive 2.2.0ZookeeperKafka 2.1.0、Spring boot 2.0.8.RELEASESpring Cloud Finchley.SR2Flume 、Hbase 2.2.6DorisDB 0.13.9、RedisVUE+jQuery+Ajax+NodeJS+ElementUI+Echarts+Datav等课程亮点: 1.与企业接轨、真实工业界产品2.DorisDB高性能分布式数据库3.大数据热门技术Flink最新版4.真正的实时数仓以及分层设计5.海量数据大屏实时报表6.数据分析涵盖全端(PC、移动、小程序)应用7.主流微服务后端系统8.数据库实时同步解决方案9.涵盖主流前端技术VUE+jQuery+Ajax+NodeJS+ElementUI+Echarts+Datav10.集成SpringCloud实现统一整合方案11.互联网大数据企业热门技术栈12.支持海量数据的实时数仓报表分析13.支持全端实时实时数仓报表分析14.全程代码实操,提供全部代码和资料 15.提供答疑和提供企业技术方案咨询企业一线架构师讲授,代码在老师的指导下企业可以复用,提供企业解决方案。  版权归作者所有,盗版将进行法律维权。 
Doris是一个开源的分布式数据仓库,支持实时数据分析和查询。在选择Doris数据模型时,需要考虑以下几个因素: 1. 数据结构和查询需求: Doris支持两种主要的数据模型:OLAP(Online Analytical Processing)和OLTP(Online Transaction Processing)。OLAP模型适用于复杂的分析查询,支持大规模聚合、多维分析和快速查询。OLTP模型适用于实时的事务处理,支持高并发、低延迟的读写操作。根据实际的业务需求和查询场景,选择适合的数据模型。 2. 数据规模和性能要求: Doris可以处理大规模的数据集,并提供高性能的查询和分析能力。如果需要处理海量数据,并且对查询性能有较高的要求,可以选择Doris的OLAP模型。它使用列存储和多维索引等技术,可以实现更快速的查询响应。 3. 数据更新频率: 如果数据更新频率较高,例如每秒或每分钟都会有大量的数据写入,那么OLTP模型可能更适合。它支持实时的数据写入和查询,适合需要快速响应和实时分析的场景。而如果数据更新频率较低,以批量或定期方式进行更新,OLAP模型可能更适合。 4. 数据一致性和可靠性: Doris提供了强一致性和高可靠性的数据存储和处理能力。根据业务的要求,选择适当的数据模型以确保数据的一致性和可靠性。 总结: 在选择Doris数据模型时,需要考虑数据结构和查询需求、数据规模和性能要求、数据更新频率以及数据一致性和可靠性等因素。根据实际情况选择适合的OLAP或OLTP模型,以满足业务需求并获得良好的性能和可扩展性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星光下的赶路人star

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值