Presto简介

MapReduce不能满足大数据快速实时adhoc查询计算的性能要求,Facebook2012年开发,2013年开源

一、Presto是什么?

Presto是一个开源的分布式SQL查询引擎,适用于交互式分析查询,数据量支持GB到PB字节。Presto支持任意数据源,是基于内存的并行计算,多个节点管道式执行,是一种Massively parallel processing(mpp)(大规模并行处理)模型。
注意:数据规模PB,不是把PB数据放到内存,只是在计算中拿出一部分放在内存、计算、抛出、再拿
官网和部署地址:http://prestodb.jd.com/overview.html

二、特点

Presto支持在线数据查询,包括Hive, Cassandra, 关系数据库以及专有数据存储。 一条Presto查询可以将多个数据源的数据进行合并,可以跨越整个组织进行分析。
在这里插入图片描述
不足:
不适合多个大表的join操作,因为presto是基于内存的,太多数据内存放不下的,如果一个presto查询查过30分钟,那就kill吧,说明不适合 也违背了presto的实时初衷。

三、数据模型

1.三层表结构:

catalog 对应某一类数据源,例如hive的数据,或mysql的数据
schema 对应mysql中的数据库
table 对应mysql中的表
在这里插入图片描述

2.查询执行模型

(1)Statement语句 其实就是输入的SQL
(2)Query 根据SQL语句生成查询执行计划,进而生成可以执行的查询(Query),一个查询执行由Stage、Task、Driver、Split、Operator和DataSource组成
(3)Stage 执行查询阶段 Stage之间是树状的结构 ,RootStage 将结果返回给coordinator ,SourceStage接收coordinator数据 其他stage都有上下游 stage分为四种 single(root)、Fixed、source、coordinator_only(DML or DDL)
(4)Exchange 两个stage数据的交换通过Exchange 两种Exchange ;Output Buffer (生产数据的stage通过此传给下游stage)Exchange Client (下游消费);如果stage 是source 直接通过connector 读数据,则改stage通过Operator与connector交互
(5)stage 并不会被执行,只是对执行计划进行管理
Task 实际运行在worker上的
(6)Driver 一个Driver处理一个split
(7)Operator 一个operator代表对一个split的一种操作 operator每次只会读取一个paged对象
(8)Split 分片一个分片就是一个大的数据集中的一个小的子集
(9)Page presto中处理的最小数据单元 一个page包含多个block对象,每个block对象是个字节数据
一个查询分解为多个stage 每个 stage拆分多个task,每个task处理一个or多个split ,一个task被分解为一个或多个Driver

四、架构

1.软件架构

大内存、万兆网络、高计算能力

2.硬件架构

presto 查询引擎是一个Master-Slave的拓扑架构
在这里插入图片描述
coordinator
中心的查询角色 接收查询请求、解析SQL 生成执行计划 任务调度 worker管理
coordinator进行是presto集群的master进程

worker
执行任务的节点

connector
presto以插件形式对数据存储层进行了抽象,它叫做连接器,不仅包含Hadoop相关组件的连接器还包括RDBMS连接器
具体访问哪个数据源是通过catalog 中的XXXX.properties文件中connector.name决定的
提取数据 负责实际执行查询计划

discovery service
将coordinator和worker结合在一起服务;
worker节点启动后向discovery service服务注册
coordinator通过discovery service获取注册的worker节点

要想使用presto 还需要客户端 CLI客户端 or 应用客户端

五、工作原理

SQL运行过程

1、coordinator接到SQL后,通过SQL语法解析器把SQL语法解析变成一个抽象的语法树AST,只是进行语法解析如果有错误此环节暴露
2、语法符合SQL语法,会经过一个逻辑查询计划器组件,通过connector 查询metadata中schema 列名 列类型等,将之与抽象语法数对应起来,生成一个物理的语法树节点 如果有类型错误会在此步报错
3、如果通过,会得到一个逻辑的查询计划,将其分发到分布式的逻辑计划器里,进行分布式解析,最后转化为一个个task
4、在每个task里面,会将位置信息解析出来,交给执行的plan,由plan将task分给worker执行
在这里插入图片描述

低延迟原理

(1)基于内存的并行计算

(2)流水式计算作业

(3)本地化计算

Presto在选择Source任务计算节点的时候,对于每一个Split,按下面的策略选择一些minCandidates
优先选择与Split同一个Host的Worker节点 如果节点不够优先选择与Split同一个Rack的Worker节点
如果节点还不够随机选择其他Rack的节点

(4)动态编译执行计划

(5)GC控制

容错

1、如果某个worker挂了,discovery service 会通知coordinator
2、对于query是没有容错的,一旦worker挂了,query就执行失败了,与其在这里容错不如直接执行
3、coordinator 和discovery service 的单点故障问题还没有解决

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 书香水墨 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读