Doris浅略介绍 +部署+使用

Doris浅略介绍 +部署+使用,第1张

Doris浅略介绍 +部署+使用

Doris 学习日常记录
  • (记录学习过程和遇到的坑,仅是个人学习使用)
    • Doris浅略介绍
    • DORIS 组成
    • 安装Doris步骤
    • Doris 连接与可视化使用
    • Doris 避坑

(记录学习过程和遇到的坑,仅是个人学习使用)

怕自己忘记特来记录一下学习Doris 的学习过程和遇到的各种坑。文中图片,文字知识点大多来自网络,如果有不妥之处,请指出,马上修改或是删除;

Doris浅略介绍

关键词:实时数据仓库 ( 之前叫百度 Palo,2018年贡献到 Apache 社区后,更名为 Doris )
身份:基于大规模并行处理技术的分布式 SQL 数据库,百度在 2017 年开源,2018 年 进入 Apache 孵化器。新浪微博,美团,小米都有使用。

定位:
MPP 架构 ( Massively Parallel Processing ),即大规模并行处理。将任务并行的分散到多个服务器和节点上,在每个节点上计算完成后,将各自部分的结果汇总在一起得到最终的结果 ( 与 Hadoop 相似 )。每个执行器有单独的CPU,内存和硬盘资源。节点之间的信息交互只能通过节点互联网络实现的,这个过程称为数据重分配。
其优点:MPP架构不用将中间数据写入磁盘,单一的执行器只会处理一个单一的任务,直接将数据stream到下一个执行阶段。这个过程称为流水线技术(时间并行),它提供了很大的性能提升。
也有缺陷:对于MPP架构来说,因为任务和节点的绑定,如果某个执行器执行过慢或故障,会导致整个集群的性能限于这个故障节点的执行速度(就是木桶短板效应)。另集群中的节点越多,则某个节点出现问题的概率越大,而一旦有节点出现问题,对于MPP架构来说,将导致整个集群性能受限,所以一般实际生产中MPP架构的集群节点不易过多。
PB (2的50次方)级别大数据集,秒级/毫秒级查询。(如果高于 PB 级别,不推荐使用 Doris 解决,可以考虑用 Hive 等工具),解决结构化数据,查询时间一般在秒级或毫秒级。

doris 优点:
通过扩建集群实现高并发,可扩展200台机器以上;
兼容mysql,不依赖外部存储系统多副本,元数据高可用;
主要用于多维分析和报表查询;
MPP的运行框架,充分挖掘多核CPU的并行计算能力;
分布式架构支持多副本支撑高可用;
采取分区分桶的机制,支持多种索引技术,满足PB级的存储和分析能力;
支持Mysql协作,简单、易用;
列式存储和压缩技术,提升查询性能;

Doris 主要整合了
Google Mesa(取 数据模型): Mesa是 2014年 Google 内部,为解决其在线广告报表和分析业务,拥有准实时的数据更新能力和低延迟的数据查询性能,实现的可扩展的分析型数据仓库系统。**Doris用它来支撑 PB 级别数据上亿次查询和数万亿次数据读取服务,同时提供每秒完成数百万行数据的更新性能。**另外,Mesa能够提供全球复制功能,可以跨多个数据中心备份,并且在低延时提供一致的和可重复的请求响应,即使其中一个整个数据中心挂掉也没问题。
Apache Impala(取 MPP Query Engine): Impala是架构在hadoop上的开源MPP查询引擎,它可以直接访问数据,提供低延迟、高并发以读为主的查询且还支持SQL语法,ODBC驱动。Doris 可以通过Impala,让你可以使用SELECt、DELETE和聚合函数SUM等sql 语句。 impala只需要几秒钟或者分钟级别就能返回数据
Apache ORCFile (取 存储格式,编码和压缩) : ORC 格式在 2013 年 1 月提出,目的是提高 Hadoop Hive 的计算性能和存储效率。做为一种为大规模流式读取而专门设计优化的自描述列存储格式,可以根据不同的列类型选择不同的压缩算法。

DORIS 组成

FrontEnd DorisDB简称 FE:前端节点负责管理元数据、管理客户端的连接、进行查询规划和调度等工作;接收、解析查询请求,规划查询计划,调度查询执行,返回查询结果;执行SQL DDL命令, 用Catalog记录库, 表, 分区, tablet副本等信息。
FE介绍:FE 主要有有三个角色,一个是 leader,一个是 follower,还有一个 observer。leader 跟 follower,主要是用来达到元数据的高可用,保证单节点宕机的情况下,元数据能够实时地在线恢复,而不影响整个服务。follower 节点通过 bdbje(BerkeleyDB Java Edition (opens new window))进行 leader 选举,其中一个 follower 成为 leader 节点,负责元数据的写入 *** 作。当 leader 节点宕机后,其他 follower 节点会重新选举出一个 leader,保证服务的高可用,完成各个 FE 之间数据同步等工作。
observer 节点仅从 leader 节点进行元数据同步,不参与选举。发现集群压力非常大的情况下,需要去扩展整个查询的能力,那么可以加 observer 的节点。observer 不参与任何的写入,只参与读取。

  • 管理元数据, 执行SQL DDL命令, 用Catalog记录库, 表, 分区, tablet副本等信息。
  • FE高可用部署, 使用复制协议选主和主从同步元数据, 所有的元数据修改 *** 作, 由FE leader节点完成, FE follower节点可执行读 *** 作。 元数据的读写满足顺序一致性。 FE的节点数目采用2n+1, 可容忍n个节点故障。 当FE leader故障时, 从现有的follower节点重新选主, 完成故障切换。
  • FE的SQL layer对用户提交的SQL进行解析, 分析, 改写, 语义分析和关系代数优化, 生产逻辑执行计划。
  • FE的Planner负责把逻辑计划转化为可分布式执行的物理计划, 分发给一组BE。
  • FE监督BE, 管理BE的上下线, 根据BE的存活和健康状态, 维持tablet副本的数量。
  • FE协调数据导入, 保证数据导入的一致性。

    BackEnd DorisDB简称 BE:后端节点负责数据存储、计算执行、副本管理等;BE 节点依据 FE 生成的物理计划,分布式地执行查询。
    • 管理tablet副本, tablet是table经过分区分桶形成的子表, 采用列式存储BE管理tablet副本, tablet是table经过分区分桶形成的子表, 采用列式存储。
    • BE受FE指导, 创建或删除子表。
    • BE接收FE分发的物理执行计划并指定BE coordinator节点, 在BE coordinator的调度下, 与其他BE worker共同协作完成执行。
    • BE读本地的列存储引擎获取数据,并通过索引和谓词下沉快速过滤数据。
    • BE后台执行compact任务, 减少查询时的读放大。
      -数据导入时, 由FE指定BE coordinator, 将数据以fanout的形式写入到tablet多副本所在的BE上。

DorisManager 和 Broker:DorisManager管理工具,负责提供集群管理、在线查询、故障查询、监控报警的可视化工具;Broker负责和外部存储(HDFS或对象存储)进行数据的导出导入等辅助功能

表先分区再进行分桶:

// 最好不要删除数据 
(用delete 方式删除时,会生成一个空的rowset来记录删除,每次读取都要对删除条件进行过滤,在条件较多时性能会受影响。)
Doris中存储的数据都是以追加(Append)的方式进入系统,意味着已写入的数据不可变更。所以 Doris采用标记的方式来实现数据更新的目的。即在一批更新数据中,将之前的数据标记为删除,并写入新的数据。
在读取过程中,Doris会自动处理这些标记数据(Merge-on-Read),保证用户读取到的是最新的数据。同时,Doris后台的数据合并(Compaction)线程也会不断的对数据进行合并,消除标记数据,以减少在读取过程中需要进行的合并 *** 作,加速查询。
大部分对数据修改的场景仅适用于 Unique Key 数据模型,因为只有该模型可以保证主键的唯一性,从而支持按主键对数据进行更新。
 CREATE TABLE '表名'
 (
     '字段1' varchar(100) null commit '描述',
     '字段2' varchar(100) null commit '描述',//索引
     '字段3' varchar(100) replace not null commit '描述',//替换
     '字段4' varchar(100) max not null commit '描述' //取最大值
     
 ) engine = olap //引擎选择模型
 aggregate key(字段1,字段2....) //索引的字段有。。。 UNIQUE KEY(order_id) //唯一字段
 partition by range('date字段') //分区字段,是时间或者list 字符串
 ( 
 partition '分区名' values less than ("2022-01-04"), //超过这个分区,数据无法插入的
 partition '分区名' values less than ("2022-06-04")
 ) 
 DISTRIBUTED BY HASH(字段1) BUCKETS 8;  // 分桶列字段1,可以是多列,但必须为 Key 列。分桶列可和 Partition 列相同或不同。 分桶,(如果使用了 Partition,则该语句描述的是数据在各个分区内的划分规则。如果不使用 Partition,则描述的是对整个表的数据的划分规则。) 8是分桶数量理论上没有上限。
 properties ( //配置信息
 "replication_num" = "3", //3个be节点
 "in_memory"="true" ,//为 true 时,Doris会尽可能将该表的数据和索引Cache到BE 内存中
 "storage_format"="v2" // 从 0.13 版本开始,新建表的默认存储格式将为 Segment V2,新的特性:bitmap 索引 内存表 page cache 字典压缩 延迟物化(Lazy Materialization)
)


安装Doris步骤
  • 开启fe节点
    • 进入fe文件夹下,开启FE 节点(如果目录下没有 doris-meta 文件夹(存储运行数据),先创建一个)
    • 执行命令 sh bin/start_fe.sh --daemon 开启fe节点;
    • 输入命令 jps查看是否开启成功;
  • 开启be节点
    • 进入be节点文件夹下(如果目录下没有 storage 文件夹(存储物理数据),先创建一个)
    • 执行命令 sh bin/start_be.sh --daemon 开启be节点;
    • ps -ef |grep palo_be查看是否开启成功
  • 后端连接进行设置
    • mysql 进行登陆:输入 mysql -h 127.0.0.1 -P 9030 –uroot 命令(注意:无端口会连接到mysql上)
    • SET PASSWORD FOR ‘用户名’ = PASSWORd(‘密码’); 初始密码设置;
    • 赋予权限远程连接 :GRANT ALL PRIVILEGES ON . TO ‘用户名’@’%’ IDENTIFIED BY ‘密码’; (看mysql版本,8.0不支持这种写法)
  • BE节点加入到FE去(多机器启动后也是这样加入)
    • 加入be节点命令:ALTER SYSTEM ADD BACKEND “IP地址:端口"; 会显示添加成功的信息
    • 查看BE状态:SHOW PROC '/backends’G
    • 删除be节点:ALTER SYSTEM DROPP BACKEND “ip:port";(暴力删除,直接删除数据,不推荐)
    • alter system decommission backend “ip:port";(优雅删除,会把数据同步到其他be节点再进行删除。推荐!)
Doris 连接与可视化使用

1.前端界面进行 *** 作;直接在浏览器打开 地址 ip:8030 ,登陆;
2.可以使用可视化工具进行 *** 作如 navicat ;
3. 可以直接在部署的界面进行 *** 作: 使用命令mysql -h 127.0.0.1 -P 9030 -uroot

Doris 避坑

1.Be节点集群扩展;
注意:一台机器上可以部署多个 BE 实例(但通常来说只会取一个),但是只能部署一个 FE。如果需要 3 副本数据,那么至少需要 3 台机器各部署一个 BE 实例(而不是1台机器部署3个BE实例)。
可以将安装包复制到多台机器上去,分别开启be节点;
通过一台 FE 加入不同地址的BE节点(ALTER SYSTEM ADD BACKEND “地址:端口”)

2.Be 节点会自动关闭;
消费字段要及时更新,否则,数据产生偏移超过一定的数量会导致BE节点被暂停消费;
查询内存不足,导致关闭;(可以通过单机扩内存或 扩容be节点解决)

3.有问题,看日志,找对应文件下的log文件夹。warning类型log;

4.不支持update,删除单条记录(你要把分区也一起写出来才可以)
delete from 表 partition 分片名 where 条件;(尽量不要删除,不然影响性能)

5.元数据的每次更新,都首先写入到磁盘的日志文件中,然后再写到内存中,最后定期checkpoint到本地磁盘上。
文章许多知识点和图片大多来自网络,仅供自己学习记录使用。具体地址如下图
[1]:https://codeantenna.com/a/eO5VdPeSFV
[2]: https://cloud.tencent.com/developer/news/835349
[3]: https://its201.com/article/ly_zixuan/119888575
[4]: https://www.cnblogs.com/tgzhu/p/14749968.html
[5]:https://www.jianshu.com/p/9fa7137f91e6
[6]:https://doris.apache.org/master/zh-CN/installing/compilation.html

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5697550.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存