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基本概念相关推荐

  1. Presto学习-presto介绍

    1.presto基本概念 1.1 presto服务进程 presto集群中一共有两种服务器进程:coordinator服务进程和worker服务进程,其中coordinator服务进程的主要作用是:接 ...

  2. Presto 详细介绍

    1.Presto 简单介绍 1.1 Presto基本概念 Presto是Facebook开源的MPP SQL引擎,旨在填补Hive在速度和灵活性(对接多种数据源)上的不足.相似的SQL on Hado ...

  3. 电商数仓描述_笔记-尚硅谷大数据项目数据仓库-电商数仓V1.2新版

    架构 项目框架 数仓架构 存储压缩 Snappy与LZO LZO安装: 读取LZO文件时,需要先创建索引,才可以进行切片. 框架版本选型Apache:运维麻烦,需要自己调研兼容性. CDH:国内使用最 ...

  4. Presto 概念 架构 优缺点

    目录 Presto 概念 Presto 架构 Presto 优缺点 Presto 概念 Presto 是一个开源的分布式 SQL 查询引擎,数据量支持 GB 到 PB 字节,主要用来处理秒级查询的场景 ...

  5. 深入理解Presto(1) : Presto的架构

    简介 Presto是一个facebook开源的分布式SQL查询引擎,适用于交互式分析查询,数据量支持GB到PB字节.presto的架构由关系型数据库的架构演化而来.presto之所以能在各个内存计算型 ...

  6. 一文读懂Data Lake的概念、特征、架构与案例

    本文包括七个小节: 1.什么是数据湖: 2.数据湖的基本特征: 3.数据湖基本架构: 4.各厂商的数据湖解决方案: 5.典型的数据湖应用场景: 6.数据湖建设的基本过程: 7.总结.受限于个人水平,谬 ...

  7. 万字干货 | 一文揭秘Presto在腾讯资讯业务中的应用

    随着产品矩阵和团队规模的扩张,跨业务.APP的数据处理和分析总是不可避免.一个显而易见的问题就是异构数据源的连通.我们基于PrestoDB构建了业务线内适应腾讯生态的联邦查询引擎,连通了部门内部20+ ...

  8. 《Spark大数据分析:核心概念、技术及实践》大数据技术一览

    本节书摘来自华章出版社<Spark大数据分析:核心概念.技术及实践>一书中的第1章,第1节,作者穆罕默德·古勒(Mohammed Guller)更多章节内容可以访问云栖社区"华章 ...

  9. spark sql合并小文件_如何比较Hive,Spark,Impala和Presto?

    Spark,Hive,Impala和Presto是基于SQL的引擎,Impala由Cloudera开发和交付.在选择这些数据库来管理数据库时,许多Hadoop用户会感到困惑.Presto是一个开放源代 ...

最新文章

  1. excel 按数据拆分 xlam_利用EXCEL提升效率之五分钟缩短至五秒批量合并EXCEL批量转换PDF批量上传报关单随附单据___EXCELVBA...
  2. vc++修改软件程序菜单实例
  3. ReflectionLabel(倒影控件)
  4. 我的第一个可用的Windows驱动完成了
  5. 趣谈设计模式 | 命令模式(Command):将命令封装为对象
  6. py 的 第 8 天
  7. 单例模式之文件缓存器
  8. android拦截短信获取短信内容,《英雄联盟手游》先锋测试招募说明:仅安卓用户...
  9. 阿里P8架构师谈:MySQL有哪些存储引擎,各自的优缺点,应用场景
  10. JS修改标签中的文本且不影响其中标签
  11. MPU6050工作原理及STM32控制MPU6050
  12. HDU 4278 卡特兰,区间DP
  13. 韩顺平_JAVA_视频教程_下载(打开迅雷,直接复制链接地址即可下载)
  14. AT91RM9200 EK or DK开发参考
  15. 算术平均值c语言函数名称,求算术平均数和集合平均数的源代码
  16. 优化机场值机体验之护照阅读器
  17. 星星之火-52:6G十大领域关键技术
  18. Oracle数据库培训视频教程 oracle工程师培训视频教程
  19. 单调队列(P3088 Crowded Cows S)
  20. php 图片指定留白叠加缩放

热门文章

  1. 分布式资本沈波:未来区块链杀手级应用将出现在“+区块链”
  2. EntityFramework中常用的数据删除方式
  3. 第二个Spring冲刺周期团队进展报告
  4. 瑞星2009:3大拦截2大防御功能主动遏制木马病毒
  5. 如何用SQLDMO在ASP.NET页面下实现数据库的备份与恢复
  6. C#——image与byte数组的转换
  7. 用数学运算实现数据无损压缩的算法
  8. 超全Typora快速入门
  9. linux环境部署ltmj,Linux系统安装与简单配置 图文.docx
  10. 挖矿为什么要用显卡_Conflux显卡挖矿收益很高吗?挖矿指南与核算手册