【大话Presto 】- 核心概念

文章目录

  • 前言
  • Operator Model And Iterator Model
  • 系统组成
  • Connector
  • 数据模型
  • 查询执行模型
    • Statement
    • Stage
    • Task
    • Split
    • Driver
    • Operator
    • Exchange
    • PipeLine
  • 总结

在这里插入图片描述

前言

Presto(PrestoDB)是一个FaceBook开源的分布式MPP SQL引擎,旨在处理大规模数据的查询和分析问题。传统数据库系统(eg:Hive)在面对大规模数据和复杂查询需求时存在限制,如数据规模限制、查询速度慢、数据源集成困难等问题。
本文主要介绍下Presto基本的核心概念。

Operator Model And Iterator Model

MPP核心的迭代器模型;操作模块化;执行计划等模型与实现框架设计,可参考最早的1995年Goetz Graefe发布的encapsulation-volcano论文:
http://daslab.seas.harvard.edu/reading-group/papers/encapsulation-volcano.pdf
论文中首次提出了一种并行SQL的设计,即通过各种Operator(如TableScan、Project、Filter、Aggregate、Exchange、Join等)组成一棵树,树的根节点产生SQL输出,树的叶子节点是各种TableScan,数据从叶子节点流入,一步步被加工直至产生最终结果。这个模型称为Operator Model,这棵树我们称之为执行计划(Plan,在传统数据库里又分为逻辑计划和物理计划)。
在Operator Model执行的过程中,各节点有三种基本状态(或者说要实现三个接口):Open、GetNext、Close。父节点的接口调用一般会递归调用子节点对应的接口。SQL执行时就从根节点Open开始,然后不断调其GetNext接口得到一行输出(后续演变为得到RowBatch),直到没有结果为止,最后调Close。这个模型称为Iterator Model。

在这里插入图片描述

系统组成

在这里插入图片描述
Presto是典型的M/S架构的系统,由一个Coordinator节点和多个Worker节点组成。 Coordinator负责如下工作:
● 接收用户查询请求,解析并生成执行计划,下发Worker节点执行。
● 监控Worker节点运行状态,各个Worker节点与Coordinator节点保持心跳连接,汇报节点状态。
● 维护MetaStore数据。
Worker节点负责执行下发到任务,通过连接器读取外部存储系统到数据,进行处理,并将处理结果发送给Coordinator节点。
Presto最初不支持高可用架构, 后面FaceBook提出了一个新的设计:一个分解的协调器(disaggregated coordinator),允许 coordinator 在单个 workers pool 中横向扩展。

Connector

Presto通过内置的各种Connector来接入多种外部数据源。Presto提供了一套标准的SPI接口,您可以使用这套接口开发自己的Connector,以便访问自定义的数据源。
通常,一个Catalog会绑定一种类型的Connector,并在Catalog的Properties文件中进行设置。

数据模型

数据模型即数据的组织形式。Presto使用Catalog、Schema和Table三层结构来管理数据。
● Catalog:一个Catalog可以包含多个Schema,物理上指向一个外部数据源,可以通过Connector访问该数据源。一次查询可以访问一个或多个Catalog。
● Schema:相当于一个数据库实例,一个Schema包含多张数据表。
● Table:数据表,与一般意义上的数据库表相同。

查询执行模型

Presto执行SQL语句,并将这些语句转换为coordinators和workers的分布式集群执行的查询。

Statement

Presto执行ANSI兼容的SQL语句,该标准由子句、表达式和谓词组成。
Query
解析一条语句时,它将其转换为一个查询,并创建一个分布式查询计划,然后将其实现为在Presto worker上运行的一系列相互连接的阶段。语句和查询之间的区别很简单。一条语句可以被认为是传递给Presto的SQL文本(Statement),而查询则是指为执行该语句而实例化的配置、组件、查询执行计划和优化信息等。一个查询执行包括Stage、Task、Driver、Split、Operator、DataSource组成,这些组件之间通过内部联系共同组成一个查询执行,从而得到SQL语句表述的查询,并得到相应的结果集。

Stage

Presto执行查询时,通过将执行分解为阶段层次结构来执行。例如需要聚合Hive中存储的十亿行的数据,它会创建一个根阶段来聚合其他几个阶段的输出,所有这些阶段都是为了实现分布式查询计划的不同部分而设计的。组成查询的阶段层次结构类似于树。每个查询都有一个根阶段,负责聚合来自其他阶段的输出。阶段是协调器用来建模分布式查询计划,但是阶段本身并不在Presto worker上运行。

Presto 中Stage共分为4种:

  1. Coordinator_Only: 用于执行DDL或者DML语句中最终的表结构创建或者更改
  2. Single: 用于聚合子Stage的输出是数据,并将最终数据输出给终端用户
  3. Fixed: 用于接受其子Stage产生的数据并在集群中对这些数据进行分布式的聚合或者分组计算
  4. Source: 用于直接连接数据源,从数据源读取数据,在读取数据的时候,该阶段也会根据Presto对查询计划执行的优化完成相关的断言下发(Predicate PushDown)和条件过滤
    按照数据的流向,我们可以约定越靠近数据源的Stage越处于上游,越远离数据源的Stage越处于下游

create table xxx as select
在这里插入图片描述
在这里插入图片描述

Task

Stage对分布式查询计划的特定部分建模,但Stage本身并不在Presto Worker上执行。Task是Presto体系结构中的工作项,因为分布式查询计划被分解为一系列Stage,然后转换为Task,然后这些Task作用于或处理Split。Presto Task有输入和输出,就像一个Stage可以由一系列Task并行执行一样,一个Task也可以与一系列驱动程序并行执行。

Split

Split分片,一个分片其实就是一个大的数据集中的一个小的子集,Driver是作用于一个分片上的一系列操作的集合,而每个节点上运行的Task,又包含多个Driver,从而一个Task可以处理多个Split。当Presto执行一个查询时,首先会从Coordinator得到一个表对应的所有的Split,然后Presto就会根据查询执行计划,选择合适的节点运行响应的task处理Split。
这里来看下在HiveConnector中HiveSplit的定义:

在这里插入图片描述
在这里插入图片描述

Driver

Task包含一个或多个并行Driver。Driver作用于数据并结合Operator以产生输出,然后由一个Task聚合,然后交付给另一个Stage的另一个Task。Driver是操作符实例的序列,它是Presto体系结构中并行度的最低级别。Driver有一个输入和一个输出。

Operator

Operator过滤、加权、消费、转换和生成数据。例如,TableScan从Connector获取数据并生成可被其他Operator使用的数据,筛选Opertaor使用数据并通过对输入数据应用谓词来生成子集。

Exchange

交换在Presto节点之间为查询的不同阶段传输数据。任务将数据生成到输出缓冲区,并使用交换客户机使用来自其他任务的数据。

PipeLine

每个Task执行一个Stage的逻辑,也可以说就是执行一个PlanFragment里的Operator,这些Operator的最佳并行度可能是不同的。比如说做Tablescan的并发可以很大,但做Final Aggregation(如Sort)的并发度只能是一。基于这个考虑,一个PlanFragment又会被切分为若干Pipeline,每个Pipeline由一组Operator组成,这些Operator被设置同样的并行度。Pipeline之间会通过LocalExchangeOperator来传递数据。

在Presto的Web UI里可以看到下面的Pipeline图。Driver的数目就是这个Pipeline的并行度。

在这里插入图片描述

总结

在这里插入图片描述

如图 Presto的一次执行查询会被分解为多个Stage, Stage之间具有依赖关系,每个Stage由一列的Task组成,每个Stage的task被均分为在每个worker上并行执行,每个Task又由多个Driver组成,每个Driver只能处理一个Split, 且每个Driver由一系列前后相连的operator组成,每个Operator都代表对于一个Split的操作

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

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

相关文章

【硬核】把一个MOS管制作成开关电路

你要是想读懂这篇文章,请先去了解MOS管的基础知识,本文是在基础之上做出的一部分扩展,可能有一点点深,请各位同学注意。 本文带你了解MOS管的开通/关断原理,使用PMOS做上管、NMOS做下管都是比较方便,使用PM…

「分享学习」SpringCloudAlibaba高并发仿斗鱼直播平台实战完结

[分享学习]SpringCloudAlibaba高并发仿斗鱼直播平台实战完结 第一段:简介 Spring Cloud Alibaba是基于Spring Cloud和阿里巴巴开源技术的微效劳框架,普遍应用于大范围高并发的互联网应用系统。本文将引见如何运用Spring Cloud Alibaba构建一个高并发的仿…

设计模式之桥接模式--连接抽象与实现(你想知道的问题都有)

目录 概述结构型设计模式桥接模式的定义桥接模式的角色和关系 版本迭代紧耦合版增加品牌两个品牌两款软件松耦合的设计版本迭代业务分析总结 问题升华抽象与实现抽象包含的一些方法或属性依赖于实现部分的接口关联关系与桥接模式桥接模式适合情况谁是实现,谁是抽象组…

希亦ACE和小吉内衣洗衣机选哪个?两款洗衣机对比

内衣洗衣机可以称得上是实现幸福的小家电,它不仅懒人的福音还是我们打工人的福音,在每天下班之后可以有时间休息了,洗完澡还有要手洗内衣裤,真的很痛苦,拥有了内衣洗衣机简直是一件非常幸福的事情,但现在市…

源码安装prometheus(普罗米修斯监控)

IP角色系统规格192.168.0.38Prometheus 服务端CentOS 74c8g192.168.0.25node_exporter 客户端CentOS 74c8g 普罗米修斯下载网址: Download | Prometheus 1.下载prometheus [rootprometheus opt]# wget https://github.com/prometheus/prometheus/releases/download/v2.47.2…

可以免费使用的设计素材网站分享

UI设计师最怕什么? 没有创意,没有灵感,没有思路! 在哪里可以得到idea?别担心,往下看! 你知道网络有多大,你想要什么吗?今天,我想和大家分享一些宝藏网页设…

榜首揭秘:热门产品原型设计工具TOP10

在现代产品制作和创新过程中,原型设计工具起着不可或缺的作用。这些工具为设计师、开发人员和团队提供了更深入的理解,以便核实和呈现他们的设计想法。根据项目的特性,可能需要使用各种类型的工具,因此,我们将在此篇文…

赛宁网安分靶场全力支持第三届“鹏城杯”攻防演练

为加速推进我国网络安全战略与数字化进程接轨,创新信息系统安全防护与网络安全技术研究模式,促进各行业网络安全建设的融合与协作,由鹏城实验室和中国网络空间安全人才教育论坛联合牵头举办的第三届“鹏城杯”联邦网络靶场协同攻防演练正式启…

MFA多因子认证

什么是多因子认证(MFA)?为什么需要MFA? 同义词 多因子认证或者多因素验证 [尤其是需要做等级保护测评的时候需要用到] 摘要 多因子认证MFA(Multi Factor Authentication)是一种安全认证过程,需…

使用宝塔面板安装mysql

1.第一步 在官网https://www.bt.cn/new/download.html下载页面直接在服务器控制面板复制这里的代码下载即可 2.第二步 下载好后按照服务器面版上有个公网地址,含有用户名和密码,保存好,然后通过公网地址打开一个网页,绑定自己注册…

恐怖地牢资产来袭!

我们将为您带来 VoxEdit 短片大赛的首场比赛!在 6 天内创建可用资产。 主题:设计与恐怖和地牢相关的资产。这些资产必须非常实用,不需要动画。(如果你愿意,你也可以制作动画)。 发挥你恐怖的一面,创造出适…

Hadoop学习总结(MapRdeuce的词频统计)

MapRdeuce编程示例——词频统计 一、MapRdeuce的词频统计的过程 二、编程过程 1、Mapper 组件 WordcountMapper.java package com.itcast.mrdemo;import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; …

傻瓜式提取网页数据的油猴脚本(JavaScript 代码)

目录 一、脚本适用范围 二、将脚本配置到浏览器 三、脚本用法 四、脚本原理 一、脚本适用范围 脚本适用范围:一次性提取任意网站的布局类似的数据,例如 淘宝的商品价格、微博的热搜标题、必应搜索的图片链接 脚本不适用范围:页面布局不相…

早安心语早读:愿我们都能活成自己喜欢的样子

1、时光,因爱而温润;岁月,因情而丰盈;愿我们都能活成自己喜欢的样子。 2、人有烦恼,就是因为记性太好,不该记的也抱着不放,背负太多,反而难以前进,追求,就会…

协同办公是什么?如何高效协同办公?读这篇就够了!

协同办公是指在工作中,团队成员通过共享信息、协作完成任务,实现高效的工作方式。它有助于促进团队成员之间的沟通、合作和协调,提升工作效率和质量。以下是一些实现高效协同办公的建议和好用的工具推荐。 首先,建立清晰的沟通渠…

mac中安装Homebrew

1、Homebrew是什么? 软件安装管理工具 2、先检查电脑中是否已经安装了Homebrew 打开终端输入:brew 提示命令没有找到,说明电脑没有安装Homebrew 如果提示上述图片说明Homebrew已经安装成功 3、安装Homebrew 进入https://brew.sh/ 复制的命…

企业云盘:企业文件数据存储与共享的全面解决方案

企业云盘为企业的文件数据的存储与管理提供了一种安全、高效又便捷的解决方案。在企业文件数据存储管理上,企业云盘有什么优势吗?本文将重点分析企业云盘的优点和好处! 一、安全性 对于企业文件数据管理工具,安全是首位。与个人…

C语言链表

1.链表 什么是链表 链表是一种数据结构&#xff0c;是一种数据存放的思想 数组特点&#xff1a;元素地址连续 数组的缺点:增加、删除、改、查比较困难&#xff0c;特别是增加的时候&#xff0c;不够灵活 链表的每一项都是一个结构体 #include<stdio.h> struct Test…

智慧工地解决方案,实现安全预警、机械智能监控、作业指导、绿色施工、劳务管理、工程进度监控、施工质量检查

智慧工地云平台全套源码 智慧工地平台采用先进的云计算、物联网和大数据技术&#xff0c;可以实现智慧工地方案的落地。能够实现实时掌控工地活动及各项进度&#xff0c;有效预防违章施工。能够为工地提供多项服务&#xff0c;如安全预警、机械智能监控、作业指导、绿色施工、劳…

Java项目实战《苍穹外卖》 一、项目概述

人道洛阳花似锦&#xff0c;偏我来时不逢春。 系列文章目录 苍穹外卖是黑马程序员2023年的Java实战项目&#xff0c;作为业余练手用&#xff0c;需要源码或者课程的可以找我&#xff0c;无偿分享 Java项目实战《苍穹外卖》 一、项目概述Java项目实战《苍穹外卖》 二、项目搭建 …