Presto - 简介(一)

本文涉及的产品
云解析DNS,个人版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: Presto - 简介(一)

背景

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

是什么

基于内存的并行计算,Facebook推出的分布式SQL交互式查询引擎,多个节点管道式执行,支持任意数据源 数据规模GB~PB 是一种Massively parallel processing(mpp)(大规模并行处理)模型数据规模PB 不是把PB数据放到内存,只是在计算中拿出一部分放在内存、计算、抛出、再拿。

为什么要用 & 优点 & 特点

多数据源、支持SQL、扩展性(可以自己扩展新的connector)、混合计算(同一种数据源的不同库 or表;将多个数据源的数据进行合并)、高性能、流水线(pipeline)

谁在用

  • Airbnb
  • jd 等

与其他组件的关系及对比

hive

数据仓库 交互式略弱的查询引擎 只能访问HDFS文件 磁盘
但是presto是无法代替hive的

spark SQL

基于spark core mpp模式 详细课件spark sql一文

kylin

cube预计算

Druid

时序,数据放内存 索引 预计算

缺点

不适合多个大表的join操作,因为presto是基于内存的,太多数据内存放不下的,如果一个presto查询查过30分钟,那就kill吧,说明不适合 也违背了presto的实时初衷。

基本概念

catalog

相当于MySQL的一个实例,

schema

相当于MySQL的database

presto查询执行模型

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

Ps:一个查询分解为多个stage 每个 stage拆分多个task,每个task处理一个or多个split ,一个task被分解为一个或多个Driver

硬件架构

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

软件架构

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执行

presto执行过程

低延迟原理

  • 基于内存的并行计算

  • 流水式计算作业

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

  • 动态编译执行计划

  • GC控制

容错

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

目录
相关文章
|
8月前
|
存储 缓存 分布式计算
HBase入门指南
HBase是一个开源的非关系型分布式数据库,设计初衷是为了解决大量结构化数据存储与处理的需求
215 0
HBase入门指南
|
29天前
|
存储 SQL 关系型数据库
StarRocks简介
【5月更文挑战第4天】StarRocks是Linux基金会的开源MPP数据库,提供MySQL协议兼容性,支持标准SQL,用于快速数据分析。它适用于OLAP、实时数仓、高并发查询等场景,具有无外部依赖、高可用和易运维的特点。StarRocks支持多种BI工具,如Tableau,且可构建各种数据模型。其系统架构包括Frontend(FE)和Backend(BE),提供存算一体和存算分离两种模式。此外,StarRocks支持四种表类型和多种数据类型,满足不同业务需求。
407 0
StarRocks简介
|
存储 SQL 资源调度
环境篇之 flink 简介|学习笔记
快速学习环境篇之 flink 简介
110 0
环境篇之 flink 简介|学习笔记
|
SQL 存储 分布式计算
Presto架构原理
Presto架构原理
483 0
Presto架构原理
|
SQL 消息中间件 分布式计算
Atlas 2.1.0 实践(3)—— Atlas集成HIve
Atlas 2.1.0 实践(3)—— Atlas集成HIve
481 0
Atlas 2.1.0 实践(3)—— Atlas集成HIve
|
Java 流计算
Flink原理简介和使用(1)
Flink原理简介和使用(1)
206 0
Flink原理简介和使用(1)
|
流计算
Flink原理简介和使用(2)
Flink原理简介和使用(2)
189 0
Flink原理简介和使用(2)
|
消息中间件 分布式计算 大数据
Flink原理简介和使用(3)
Flink原理简介和使用(3)
186 0
Flink原理简介和使用(3)
|
分布式计算 大数据 数据处理
Flink 简介
Flink 简介
212 0
|
SQL 存储 资源调度
Presto - 简介(二)
Presto - 简介(二)
312 0