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)。 
Presto Task Overview

Pipeline

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

在Presto的Web UI里可以看到下面的Pipeline图。Driver的数目就是这个Pipeline的并行度。 
Presto 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文件的一个分片

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

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

相关文章

2019春第六周编程总结

这个作业属于哪个课程C语言程序设计Ⅱ这个作业要求在哪里https://edu.cnblogs.com/campus/zswxy/MS/homework/2829我在这个课程的目标是利用指针知识解决相关实际问题在具体哪方面帮我实现目标设计密码开锁、交换变量解决问题以及电码加密参考文献C语言基础、http://www.w3scho…

昨天7月21号,笑笑又生病了

21号从上午就开始发烧,中午吃了安瑞克烧退了,但是下午6点左右又开始发烧了,再次吃安瑞克,效果不是太好,还是烧,睡了觉之后烧退了。晚上十点又开始发烧&#xff0c;吃美林悬浮液烧还是没退&#xff0c;又吃安瑞克&#xff0c;还是烧&#xff0c;到了一点钟,烧,但稍微好一点 22号…

Exchange企业实战技巧(26)在Outlook中打开多个邮箱

工作中&#xff0c;有时要需要让某个用户在outlook中同时打开多个exchange邮箱&#xff0c;对于outlook2010来说&#xff0c;是支持多个Exchange邮箱用户账户的并存&#xff0c;而outlook2007则不支持。那该功能有没其他实现方法呢&#xff1f;答案是有的。 如果你的Exchange是…

sql 为什么要用where 1=1或者where 1 =0 ?

一、不用where 11 在多条件查询中的困扰   举个例子&#xff0c;如果您做查询页面&#xff0c;并且&#xff0c;可查询的选项有多个&#xff0c;同时&#xff0c;还让用户自行选择并输入查询关键词&#xff0c;那么&#xff0c;按平时的查询语句的动态构造&#xff0c;代码…

Java元数据总结:Java注释的使用和定义

元数据从metadata一词译来&#xff0c;就是“关于数据的数据”的意思。越来越的开源框架都提供了“元数据”支持了&#xff0c;其实也就是注释支持。今天系统学习一下Java注释(Java元数据)。本文内容不限于Javadoc的注释。  1.什么是Java元数据&#xff0c;有什么作用?  元…

Emulator Error: Could not load OpenGLES emulati...

为什么80%的码农都做不了架构师&#xff1f;>>> 模拟器提示警告&#xff1a;Emulator Error: Could not load OpenGLES emulation library: Could not load DLL! 亲测可用&#xff1a; 从SDK\tools\lib目录下将一下四个dll文件复制到SDK\tools&#xff0c;重启模…

C++中的模板展开问题

在c中使用模板的目的是&#xff1a;减少代码量&#xff0c;相同功能的代码只写一份&#xff0c;根据传入不同的参数&#xff0c;实现相同的功能。 优点&#xff1a;减少了程序开发者的工作 量&#xff0c;只写一份相同功能的代码 缺点&#xff1a;编译器在展开时&#xff0c;每…

请教设计模式大牛们几点

我在做一个3D场景编辑器&#xff0c;假如所有物体从ObjectX而来&#xff0c;现在在此对象层&#xff0c;不知道如何设计出较好的结构来。问题如下&#xff1a; 1&#xff1a;每个物体都可以被单独的设置各种效果——阴影、多重纹理贴图、反射。 也可以设置一些动画&#xff1…

关于.net的垃圾回收和大对象处理_标记

CLR垃圾回收器根据所占空间大小划分对象。大对象和小对象的处理方式有很大区别。比如内存碎片整理 —— 在内存中移动大对象的成本是昂贵的&#xff0c;让我们研究一下垃圾回收器是如何处理大对象的&#xff0c;大对象对程序性能有哪些潜在的影响。 大对象堆和垃圾回收 在.Net …

TiKV 源码解析系列 - Raft 的优化

这篇文章转载TiDB大牛 唐刘 的博客&#xff1a;https://mp.weixin.qq.com/s?__bizMzI3NDIxNTQyOQ&mid2247484544&idx1&sn7d8e412ecc5aaeb3f9b7cf391bdcf398&chksmeb1623eadc61aafcefcfbdf36b388a5f96d3009d21641eb6ac67c57317d6c397ddeb58fc7d06&scene21#…

IE9 Preview 4的CSS3支持。

1、完美支持了box-shadow&#xff0c;无需前缀。【哈哈说曹操曹操到&#xff0c;还剩下text-shadow未支持了。】 2、有了支持CSS3 Gradient的迹象&#xff0c;但是很神奇的是IE9现在支持的是-webkit-gradient的写法&#xff0c;不过尚不支持color-stop。嗯&#xff0c;相信下个…

三篇文章了解 TiDB 技术内幕——说存储

此文转载了 申砾 PingCAP 的文章&#xff1a;https://mp.weixin.qq.com/s?__bizMzI3NDIxNTQyOQ&mid2247484822&idx1&sn5434362800d8dcc0ca69d2f3f3260173&chksmeb1622fcdc61abea428f74b26a24bc589d524dd3b666d9b124809300f488d00b33a315a87792&scene21#we…

复制数组方法总结

为什么80%的码农都做不了架构师&#xff1f;>>> 在java中&#xff0c;对数组复制有多种 1.通过循环来复制 比如用for循环 int a[]{1,2,3}; int b[]new int[a.length]; for(int i0;i<a.length;i){ b[i]a[i]; } 2.直接复制 int a[]{1,2,3}; int b[]a…

JS/Cs相互调用

js调用cs中函数的方法 在前台js代码里写上<%method();%>举例:cs文件中写的有public void method(){....执行某些操作.}这个函数,然后在前台页面的js里面调用.<script type"text/javascript"><%method();%></script>在cs中调用js函数法一:C…

学习进度_第六周

第六周主要就是针对结对开发项目&#xff0c;又赶上清明节假期&#xff0c;所以学习时间打了些折扣。 编程时间&#xff1a;课上3小时课下5小时。 博客1篇。转载于:https://www.cnblogs.com/flw0322/p/10680226.html

PostgreSQL体系架构

PostgreSQL 使用客户机/服务器&#xff08;C/S&#xff09;的模式提供服务&#xff0c;一个PostgreSQL会话由下列相关的进程&#xff08;程序&#xff09;组成&#xff1a; (1)一个服务器端进程。该进程管理数据库文件&#xff0c;接受客户端与数据库的连接&#xff0c;且代表…

地址运算符:

C语言中的指针&#xff0c;是用来存储变量地址。 int i 34; printf("i %d, address %p",i,&i); i 34, address 0x7fff5fbff85c转载于:https://www.cnblogs.com/sell/archive/2012/12/26/2834174.html

做好一个team leader的几点看法

每年给组员做PR的时候&#xff0c;总会谈及职业规划的问题。也总会被被问到怎样何时才可以做一个lead&#xff0c;为什么自己不能做lead&#xff1f;就从别处收集了一些自己也加了一些作为一个指引。但实际在具体操作时&#xff0c;也是每个manager见仁见智的事情&#xff0c;而…

不要总想着二进制

同事转了一道题&#xff1a; 有 100 支一模一样的瓶子&#xff0c;编号 1-100。其中 99 瓶是水&#xff0c;1 瓶是看起来像水的毒药。 只要老鼠喝下一小口毒药&#xff0c;一天后就会死。 现在你有 7 只老鼠和一天时间&#xff0c;怎么检验出哪个号码的瓶子里是毒药&#xff1f…

C语言打包解包文件程序(简易版)

//测试通过 科嵌电子 #include <stdio.h> #include <string.h> #include <stdlib.h> typedef unsigned int uint; typedef unsigned char byte; // 包文件中最大可容纳的文件个数 #define MAX_FILE_COUNT 10 // 全局包…