Presto基本概念
Presto基本概念
Presto是Facebook开源的MPP SQL引擎,旨在填补Hive在速度和灵活性(对接多种数据源)上的不足。相似的SQL on Hadoop竞品还有Impala和Spark SQL等。这里我们介绍下Presto的基本概念,为后续的笔记做基础。
Operator Model & Iterator Model
MPP(Massive Parellel Processing)系统的鼻祖是一个叫Volcano的并行数据库(论文在此),它提出了一种并行执行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。
Stage
在MPP系统里,一个执行计划经常会被切分为各种子树(一般称为PlanFragment),每个子树可以并行地在多台机器上执行。PlanFragment之间通过Exchange Operator来传递数据,这里就有很多技术(如Shuffle、Broadcast等)。
Presto中一个Stage就对应一个PlanFragment。在Presto的Web UI里可以看到如下的Stage连接图,整个执行计划被划分为若干Stage,每个Stage里都有一个PlanFragment。还可以看到Stage里有很多Operator,我们后面再说。
Task
Stage只是定义了执行计划怎么划分,接下来会被调度到各个机器上去执行,每一个实例就称为一个Task,也就是说Presto里Task是Stage的实例。一般来说,一台机器(Presto里的Worker)只会运行一个Stage的一个实例。当然它会跑多个Task,但它们一般来说是属于不同的Stage的。因为理论上来说同一个Stage的Task实例是相同的,在一台机器上跑两个跟跑一个是机同的(Task里面已经有并行了)。
在Presto的Web UI里可以看到如下的Task Overview,默认情况下一个Stage最多在一个Worker上跑一个Task。Task ID由两部分组成,第一部分是Stage ID,第二部分为该Task在对应Stage里的ID。可以看到同个Stage下的不同Task是跑在不同机器上的(一般一台机器只跑一个Presto Worker)。
Pipeline
每个Task执行一个Stage的逻辑,也可以说就是执行一个PlanFragment里的Operator,这些Operator的最佳并行度可能是不同的。比如说做Tablescan的并发可以很大,但做Final Aggregation(如Sort)的并发度只能是一。基于这个考虑,一个PlanFragment又会被切分为若干Pipeline,每个Pipeline由一组Operator组成,这些Operator被设置同样的并行度。Pipeline之间会通过LocalExchangeOperator来传递数据。
在Presto的Web UI里可以看到下面的Pipeline图。Driver的数目就是这个Pipeline的并行度。
Driver
Pipeline其实是一个虚拟的概念,它的实例就叫Driver。可以说Pipeline就是DriverFactory,用来create Driver的。每一个Driver由一串Operator组成,负责接收一组输入数据,并产生一组输出数据。Driver里不再有并行度,每个Driver都是单线程的。
Split
Split就是一组数据,可以认为是一个RowBatch,也可以说是Table的一个分片。对于Hive中的表,一个Split就是HDFS文件的一个分片。可能是一个Block的大小(如果文件格式支持分片,如ORC、Parquet等),也可能是整个文件(如果文件格式不支持分片,如zip文件)。具体地,可以看源码中HiveSplit的定义:
public class HiveSplitimplements ConnectorSplit
{private final String clientId;private final String path; // HDFS中的文件路径private final long start; // Split在文件中的起始位置private final long length; // Split的长度private final Properties schema;private final List<HivePartitionKey> partitionKeys;private final List<HostAddress> addresses; // 对应Block所在的DataNode地址private final String database;private final String table;private final String partitionName;private final TupleDomain<HiveColumnHandle> effectivePredicate;private final OptionalInt bucketNumber;private final boolean forceLocalScheduling;private final Map<Integer, HiveType> columnCoercions;...
}
总结
Presto的基本概念就介绍到这里,总结一下:
- Stage对应一个PlanFragment
- Task是Stage的实例
- 每个PlanFragment会被拆分为若干Pipeline
- Pipeline的实例是Driver
- Split是Table的一个分片,在Hive中可以对应HDFS文件的一个分片
Presto基本概念相关推荐
- Presto学习-presto介绍
1.presto基本概念 1.1 presto服务进程 presto集群中一共有两种服务器进程:coordinator服务进程和worker服务进程,其中coordinator服务进程的主要作用是:接 ...
- Presto 详细介绍
1.Presto 简单介绍 1.1 Presto基本概念 Presto是Facebook开源的MPP SQL引擎,旨在填补Hive在速度和灵活性(对接多种数据源)上的不足.相似的SQL on Hado ...
- 电商数仓描述_笔记-尚硅谷大数据项目数据仓库-电商数仓V1.2新版
架构 项目框架 数仓架构 存储压缩 Snappy与LZO LZO安装: 读取LZO文件时,需要先创建索引,才可以进行切片. 框架版本选型Apache:运维麻烦,需要自己调研兼容性. CDH:国内使用最 ...
- Presto 概念 架构 优缺点
目录 Presto 概念 Presto 架构 Presto 优缺点 Presto 概念 Presto 是一个开源的分布式 SQL 查询引擎,数据量支持 GB 到 PB 字节,主要用来处理秒级查询的场景 ...
- 深入理解Presto(1) : Presto的架构
简介 Presto是一个facebook开源的分布式SQL查询引擎,适用于交互式分析查询,数据量支持GB到PB字节.presto的架构由关系型数据库的架构演化而来.presto之所以能在各个内存计算型 ...
- 一文读懂Data Lake的概念、特征、架构与案例
本文包括七个小节: 1.什么是数据湖: 2.数据湖的基本特征: 3.数据湖基本架构: 4.各厂商的数据湖解决方案: 5.典型的数据湖应用场景: 6.数据湖建设的基本过程: 7.总结.受限于个人水平,谬 ...
- 万字干货 | 一文揭秘Presto在腾讯资讯业务中的应用
随着产品矩阵和团队规模的扩张,跨业务.APP的数据处理和分析总是不可避免.一个显而易见的问题就是异构数据源的连通.我们基于PrestoDB构建了业务线内适应腾讯生态的联邦查询引擎,连通了部门内部20+ ...
- 《Spark大数据分析:核心概念、技术及实践》大数据技术一览
本节书摘来自华章出版社<Spark大数据分析:核心概念.技术及实践>一书中的第1章,第1节,作者穆罕默德·古勒(Mohammed Guller)更多章节内容可以访问云栖社区"华章 ...
- spark sql合并小文件_如何比较Hive,Spark,Impala和Presto?
Spark,Hive,Impala和Presto是基于SQL的引擎,Impala由Cloudera开发和交付.在选择这些数据库来管理数据库时,许多Hadoop用户会感到困惑.Presto是一个开放源代 ...
最新文章
- excel 按数据拆分 xlam_利用EXCEL提升效率之五分钟缩短至五秒批量合并EXCEL批量转换PDF批量上传报关单随附单据___EXCELVBA...
- vc++修改软件程序菜单实例
- ReflectionLabel(倒影控件)
- 我的第一个可用的Windows驱动完成了
- 趣谈设计模式 | 命令模式(Command):将命令封装为对象
- py 的 第 8 天
- 单例模式之文件缓存器
- android拦截短信获取短信内容,《英雄联盟手游》先锋测试招募说明:仅安卓用户...
- 阿里P8架构师谈:MySQL有哪些存储引擎,各自的优缺点,应用场景
- JS修改标签中的文本且不影响其中标签
- MPU6050工作原理及STM32控制MPU6050
- HDU 4278 卡特兰,区间DP
- 韩顺平_JAVA_视频教程_下载(打开迅雷,直接复制链接地址即可下载)
- AT91RM9200 EK or DK开发参考
- 算术平均值c语言函数名称,求算术平均数和集合平均数的源代码
- 优化机场值机体验之护照阅读器
- 星星之火-52:6G十大领域关键技术
- Oracle数据库培训视频教程 oracle工程师培训视频教程
- 单调队列(P3088 Crowded Cows S)
- php 图片指定留白叠加缩放
热门文章
- 分布式资本沈波:未来区块链杀手级应用将出现在“+区块链”
- EntityFramework中常用的数据删除方式
- 第二个Spring冲刺周期团队进展报告
- 瑞星2009:3大拦截2大防御功能主动遏制木马病毒
- 如何用SQLDMO在ASP.NET页面下实现数据库的备份与恢复
- C#——image与byte数组的转换
- 用数学运算实现数据无损压缩的算法
- 超全Typora快速入门
- linux环境部署ltmj,Linux系统安装与简单配置 图文.docx
- 挖矿为什么要用显卡_Conflux显卡挖矿收益很高吗?挖矿指南与核算手册