[2.0快速体验]Apache Doris 2.0 弹性计算节点快速体验

news2024/10/5 13:38:27

​1. 概览

我们都知道Doris 目前是一个典型的Share-Nothing的架构,Doris 通过绑定数据和计算资源在同一个节点获得非常好的性能表现. 但随着Doris 计算引擎性能持续提高, 越来越多的用户也开始选择使用Doris直接查询数据湖数据. 这类场景是一种Share-Disk场景, 数据往往存储在远端的 HDFS/S3 上, 计算在 Doris 中, Doris 通过网络获取数据, 然后在内存完成计算. 而如果这两个负载都混合在同一个集群时, 对于目前 Doris 的架构就会出现以下不足:

  1. 资源隔离差, 两个负载对集群的响应要求不一, 混合部署会有相互的影响,
  2. 数据湖场景下磁盘利用率低:集群扩容时, 数据湖查询只需要扩容计算资源, 而目前只能存储计算一起扩容, 导致磁盘使用率变低
  3. 扩容效率差: 扩容后会启动Tablet数据的迁移, 整体过程比较漫长. 而数据湖查询有着明显的高峰低谷, 需要小时级弹性能力.
Shared Nothing:各个处理单元都有自己私有的CPU/内存/硬盘等,不存在共享资源,类似于MPP(大规模并行处理)模式,各处理单元之间通过协议通信,并行处理和扩展能力更好。典型代表DB2 DPF和Hadoop ,各节点相互独立,各自处理自己的数据,处理后的结果可能向上层汇总或在节点间流转。我们常说的 Sharding 其实就是Share Nothing架构,它是把某个表从物理存储上被水平分割,并分配给多台服务器(或多个实例),每台服务器可以独立工作,具备共同的schema,比如MySQL Proxy和Google的各种架构,只需增加服务器数就可以增加处理能力和容量。

针对上面这些不足的地方,我们专门设计出来一种用于联邦计算的 BE 节点角色:计算节点,这种角色的 BE 节点,专门处理数据湖这类远程的联邦查询. 原来的BE节点类型称为混合节点, 这类节点既能做SQL查询, 又有Tablet数据存储管理. 而计算节点只能做SQL查询, 它不会保存任何数据.

有了计算节点后, 集群部署拓扑也会发生变: 混合节点用于OLAP类型表的数据计算, 这个节点根据存储的需求而扩容, 而计算节点用于联邦查询, 该节点类型随着计算负载而扩容.

此外, 计算节点由于没有存储, 因此在部署时, 计算节点可以混部在HDD磁盘机器或者部署在容器之中

这样这种节点其实就变成了一个无状态的 BE 节点,我们可以非常容易的进行弹性伸缩,不需要想之前混合节点那样,在扩展集群的时候,需要等待 tablet 副本均衡完成,这个节点才能进行有效的负载。

2. 弹性节点使用

Doris的安装这里我就不做太多详细介绍了,具体的可以参照: Apache Doris 系列:入门篇-安装部署

需要注意的点:

FE 配置

在 fe.conf 里添加下面俩个配置

prefer_compute_node_for_external_table=true
min_backend_num_for_external_table=1
  1. prefer_compute_node_for_external_table : 如果设置为 true,对外部表的查询将优先分配给计算节点。计算节点的最大数量由 min_backend_num_for_external_table 控制。如果设置为 false,对外部表的查询将分配给任何节点
  2. min_backend_num_for_external_table : 仅在 prefer_compute_node_for_external_table 为 true 时生效。如果计算节点数小于此值,则对外部表的查询将尝试使用一些混合节点,让节点总数达到这个值。如果计算节点数大于这个值,外部表的查询将只分配给计算节点, 默认值是3,这里我演示因为节点数量问题,我设置成了1,

BE 配置

在be.conf 里添加下面配置,

be_node_role=computation

该配置项默认为mix, 即原来的BE节点类型, 设置为computation后, 该节点为计算节点.

我这里是将,192.168.0.128 和 192.168.0.129 这两个节点设置成计算节点

然后我们将节点加入到集群之后,并启动节点,查看 BE 的信息,可以看到,NodeRole 这个字段,如果是 mix 表示为混合节点,如果是computation表示为计算节点

mysql> show backends\G;
*************************** 1. row ***************************
            BackendId: 11007
              Cluster: default_cluster
                    IP: 192.168.0.114
              HostName: 192.168.0.114
        HeartbeatPort: 9050
                BePort: 9060
              HttpPort: 8040
              BrpcPort: 8060
        LastStartTime: 2023-06-03 21:51:24
        LastHeartbeat: 2023-06-03 21:51:40
                Alive: true
  SystemDecommissioned: false
ClusterDecommissioned: false
            TabletNum: 21
      DataUsedCapacity: 0.000
        AvailCapacity: 177.323 GB
        TotalCapacity: 196.735 GB
              UsedPct: 9.87 %
        MaxDiskUsedPct: 9.87 %
    RemoteUsedCapacity: 0.000
                  Tag: {"location" : "default"}
                ErrMsg:
              Version: doris-2.0.0-alpha-a925ec9
                Status: {"lastSuccessReportTabletsTime":"2023-06-03 21:51:26","lastStreamLoadTime":-1,"isQueryDisabled":false,"isLoadDisabled":false}
HeartbeatFailureCounter: 0
              NodeRole: mix
*************************** 2. row ***************************
            BackendId: 11026
              Cluster: default_cluster
                    IP: 192.168.0.128
              HostName: 192.168.0.128
        HeartbeatPort: 9050
                BePort: 9060
              HttpPort: 8040
              BrpcPort: 8060
        LastStartTime: 2023-06-03 21:50:34
        LastHeartbeat: 2023-06-03 21:51:40
                Alive: true
  SystemDecommissioned: false
ClusterDecommissioned: false
            TabletNum: 0
      DataUsedCapacity: 0.000
        AvailCapacity: 177.323 GB
        TotalCapacity: 196.735 GB
              UsedPct: 9.87 %
        MaxDiskUsedPct: 9.87 %
    RemoteUsedCapacity: 0.000
                  Tag: {"location" : "default"}
                ErrMsg:
              Version: doris-2.0.0-alpha-a925ec9
                Status: {"lastSuccessReportTabletsTime":"2023-06-03 21:51:38","lastStreamLoadTime":-1,"isQueryDisabled":false,"isLoadDisabled":false}
HeartbeatFailureCounter: 0
              NodeRole: computation
*************************** 3. row ***************************
            BackendId: 11045
              Cluster: default_cluster
                    IP: 192.168.0.129
              HostName: 192.168.0.129
        HeartbeatPort: 9050
                BePort: 9060
              HttpPort: 8040
              BrpcPort: 8060
        LastStartTime: 2023-06-03 21:49:52
        LastHeartbeat: 2023-06-03 21:51:40
                Alive: true
  SystemDecommissioned: false
ClusterDecommissioned: false
            TabletNum: 0
      DataUsedCapacity: 0.000
        AvailCapacity: 177.319 GB
        TotalCapacity: 196.735 GB
              UsedPct: 9.87 %
        MaxDiskUsedPct: 9.87 %
    RemoteUsedCapacity: 0.000
                  Tag: {"location" : "default"}
                ErrMsg:
              Version: doris-2.0.0-alpha-a925ec9
                Status: {"lastSuccessReportTabletsTime":"2023-06-03 21:51:02","lastStreamLoadTime":-1,"isQueryDisabled":false,"isLoadDisabled":false}
HeartbeatFailureCounter: 0
              NodeRole: computation
3 rows in set (0.00 sec)

3. 测试

下面我们以 MySQL Catalog 外表为例来测试弹性节点的使用

创建MySQL Catalog

CREATE CATALOG mysql properties (
  "type"="jdbc",
  "jdbc.user"="root",
  "jdbc.password"="NewPass4321!",
  "jdbc.jdbc_url"="jdbc:mysql://192.168.0.250:3306/test",
  "jdbc.driver_url"="mysql-connector-java-8.0.25.jar",
  "jdbc.driver_class"="com.mysql.cj.jdbc.Driver"
)

查询 Catalog 外表

mysql> set enable_profile = true;
Query OK, 0 rows affected (0.00 sec)

mysql> select date,user_src,new_order,payed_order from mysql.test.order_analysis limit 2;
+---------------------+-------------------------+-----------+-------------+
| date               | user_src               | new_order | payed_order |
+---------------------+-------------------------+-----------+-------------+
| 2015-10-12 00:00:00 | 广告二维码             |     15253 |       13210 |
| 2015-10-14 00:00:00 | 微信朋友圈H5页面       |     17134 |       11270 |
+---------------------+-------------------------+-----------+-------------+
2 rows in set (0.03 sec)

查看 FE Web UI QueryProfile

查看我们刚才执行的 SQL Profile 可以看到,这个Catalog外表的计算是在计算节点上进行的,并不是在混合节点上

将外部表的数据导入到 Doris 内表里

mysql> create table test_01 as select * from mysql.test.order_analysis;
ERROR 1105 (HY000): Unexpected exception: errCode = 2, detailMessage = Failed to execute CTAS Reason: errCode = 2, detailMessage = Failed to find 3 backend(s) for policy: cluster=default_cluster | query=false | load=false | schedule=true | tags=[{"location" : "default"}] | medium=HDD
mysql>

这里可以看到通过Create table as Select这种才做是失败的,原因是因为,我这个时候只有一个混合BE节点,默认三副本,所以失败。同时也说明的弹性计算节点是不带存储的,不存储tablet副本信息。

下面在创建表的时候指定副本是 1 就可以正常创建表,并将数据导入进去。因为这里只有一个(192.168.0.114)节点是mix类型的节点,其他两个节点都是计算节点。

mysql> create table test_01 PROPERTIES("replication_num" = "1") as select * from mysql.test.order_analysis;
Query OK, 5061 rows affected (0.29 sec)
{'label':'insert_9c013d7ccf064a16_a7ca128d72869a35', 'status':'VISIBLE', 'txnId':'1'}

mysql> select count(*) from test_01;
+----------+
| count(*) |
+----------+
|     5061 |
+----------+
1 row in set (0.07 sec)

mysql>

下面我们在 Doris 内表上执行查询

我们在Web UI上同样可以看到内表执行的节点是在Mix类型的节点上。

计算节点下线

下线操作和之前 BE 节点的下线一样,只不过这个下线速度会非常的快,这是因为这个节点不保存 tablet 数据,下线的时候不需要进行tablet 副本的均衡操作。

alter system DECOMMISSION backend "192.168.0.128:9050";

4. 总结

是不是使用非常简单方便,同时对于数据湖外表计算需要快速弹性扩缩容的场景,既简单又快捷,快快体验起来吧

如果你想快读体验,并想做体验中遇到问题能获取社区的快速支持,可以添加我的微信:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue.js 中的模板编译原理是什么?

Vue.js 中的模板编译原理是什么? Vue.js是一种流行的前端框架,它使用了一种称为“模板”的技术来实现视图的渲染和更新。在Vue.js中,模板是一种类似HTML的语言,用于描述视图的结构和内容。但是,Vue.js并不直接将模板转…

【web框架】——Django01——如桃花来

目录索引 web框架介绍:常见软件的架构:*CS架构:**BS架构:* 网络通信:socket知识复习:*服务端代码逻辑:**客户端代码逻辑:* socket代码演示:*服务端代码演示:*…

【学习记录】win10 + ubuntu 22.04双系统安装

一、背景 因为家里的台式(Windows 10)最近一直频繁蓝屏,再加上Win10之前经常性的资源管理器未响应,对Windows系统逐渐失去了信心,于是想着安装稳定性较好的Linux。以前抵触Linux是因为其人机交互界面没Windows那么直观…

今天来当一下数据库,看一下sql到底在里面如何执行的?

今天来当一下数据库,看一下sql到底在里面如何执行的? 一、引子 不管是开发,还是运维,亦或者是产品。 多多少少会写sql,只不过有的人写得多,有的人写得少罢了。 但是你有想过,在数据库中&…

ASCII 码对照表

1. ASCII码表(控制字符) 2. ASCII码表(打印字符) 3. ASCII码表(扩展字符)

不要藏着掖着了,600万用户已经使用“Excel新版本”,统统拿走

600万用户正在切换 已经2023年,就不用再藏着掖着了,目前已经有600万用户开始使用了。 没错,“Excel新版本”已经开始普及了,正在大面积替代切换,不仅Excel用户能用,Access用户照样可以轻松玩转&#xff0…

VBA中如何调用自定义函数

一、问题提出 在VBA中我要把B列中所有的非空单元格的值都判断一遍,如果大于60就在其旁边的单元格写入"及格",反之就写入不及格。如下图所示: 由于B列的非空单元格数量无法确定,所以我们就要定义一个自定义的函数来获取…

【Qt】delegate的自定义实现函数createEditor进不去【2023.05.07】

摘要 妈卖批,因为这个函数进不去,emo了一下午。实际上就是因为函数声明和定义的地方漏了个const关键字。 1.正确✔: QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) cons…

DCASE挑战赛中的声音事件检测与定位(SELD)子任务介绍

DCASE(Detection and Classification of Acoustic Scenes and Events)系列挑战赛包含多个与声音计算相关的子任务,以DCASE2023为例,其包含如下七个与声音计算相关的任务。 (source:DCASE challenge website) 声音事件…

ChatGPT配合两款神器,1分钟生成流程图

流程图,工作上再正常不过的一种图形,常见制图方法对比: 传统手动制图:耗时耗力,迁移性差AI 辅助制图:使用自然语言提出需求,零基础快速制图 几款常见的我在用的在线绘图工具推荐: Pr…

火山引擎DataLeap的Catalog系统搜索实践(三):Learning to rank与后续工作

Learning to rank Learning to rank主要分为数据收集,离线训练和在线预测三个部分。搜索系统是一个Data-driven system,因此火山引擎DataLeap的Catalog系统设计之初就需要考虑数据收集。收集的数据可以用来评估和提升搜索的效果。数据收集和在线预测前面…

基于国民技术N32G435的FLASH读写测试

一、测试工具: 1.国民技术N32G43XCL-STB开发板----主控为N32G435CB 2.创芯工坊PW200加密离线烧录器 3.PowerWriter上位机,配合PW200查看FLASH数据。 4.keil5 二、测试背景 现在很多的应用中都需要保存离线数据,例如一些传感器的校正数…

基于C#制作一个鼠标连点器

秒杀抢券、压枪换弹都是网上冲浪的基本操作,制作一个鼠标连点器,从此在互联网所向披靡。 一、项目搭建1.1、创建1.2、界面设计 二、功能实现2.1、类型库调用2.2、窗口句柄定义2.3、线程处理2.4、快捷键 一、项目搭建 1.1、创建 打开Visual Studio,右侧选择创建新项…

ARM体系结构和RAM的工程搭建、程序编写

目录 工程搭建 程序编写 带标志位的加法ADC ADCS 跳转指令B\BL 栈的应用->叶子函数的调用过程 栈的应用->非叶子函数的调用过程 异常中断产生指令 协处理器指令 伪操作 安装交叉编译工具 Makefile 宏定义 预编译指令 申请一个字的空间 .word 申请多个字节空间 嵌套编程 方…

如何查询期刊的SCI分区

好消息是CSDN AI写作助手上线了 我不用自己一个字一个字去写SCI分区是啥(x) 然而—— 麻了还是自己写吧, 在人工智能这条路上,CSDN还是需要努力。 简单来说,我们做科研、发文章,肯定是需要比较的 谁的…

记录一次Mysql死锁事件(由Insert与uniqueKey导致)

| 导语记录一次于2023年01月23日遇到的死锁问题。 1、基础 1.1 数据库隔离级别 1.1.1RC READ COMMITTED:只能读取已经提交的数据;此时:允许幻读和不可重复读,但不允许脏读,所以RC隔离级别要求解决脏读; 1.1…

Mac下通过Docker安装ElasticSearch集群

1、安装ElasticSearch 使用docker直接获取es镜像,执行命令docker pull elasticsearch:7.7.0 执行完成后,执行docker images即可看到上一步拉取的镜像。 2、创建数据挂在目录,以及配置ElasticSearch集群配置文件 创建数据文件挂载目录 mkdir -…

如何快速掌握Facebook运营+独立站运营基础?

在当今数字化时代,Facebook运营和独立站运营成为许多企业和个人创业者的关键战略。通过巧妙地结合这两个渠道,你可以有效地推广品牌、吸引目标受众并实现商业目标。本文将为你介绍如何快速掌握Facebook运营和独立站运营的基础知识,为你的业务…

微服务组件之Eureka

1、什么是Eureka,为什么要有Eureka 在传统的RPC远程调用中,管理每个服务于服务之间依赖关系复杂,管理复杂,所以需要使用服务治理,管理服务于服务之间依赖关系,可以实现服务调用、负载均衡、容错等&#xf…

一文搞懂KMP算法!!!

一文搞懂KMP算法!!! 🍁什么是KMP算法?🍁什么是 next() 数组 和 前缀表?前缀表有什么作用呢最长公共前后缀如何计算前缀表 🚀 构造next数组🚀 使用next数组来做匹配 🍁什么是KMP算法…