Presto入门介绍

背景

Hive等数据处理工具使用MapReduce作为底层处理框架,处理简单的数据,响应时间还可以接受,但随着数据量的增加,使用Hive哪怕进行简单的数据处理都在分钟级甚至小时级别,这显然不能满足现在实时交互的需求。Presto是FaceBook于2012年开发的项目,并于2013年开源。目前国内运用Presto比较成熟的有京东、美团等。

概念

Presto是一个运行在分布式系统上的分布式系统,用于查询分布在一个或多个不同数据源之间的大数据集。Presto并不是一个数据库,但是可以接入多种数据源有多种,包括:Hive、Mysql、ES、Kafka、Cassandra、Mongo、Redis等。

Presto基本概念

数据模型

Presto使用Catalog,Schema,Table三层结构来管理数据。

  1. Catalog表示数据源。每一个连接的数据源都有一个名字,我们可以用show catalogs来查看目前连接的数据源。
  2. Schema表示一个数据库实例。我们可以用show schemas from catalog_name,来查看catalog_name下所有的数据库。
  3. Table表示一个数据表实例。我们可以通过show tables from catalog_name.schema_name,来查看catalog_name.schema_name数据库下的所有的数据表。

Presto架构模型

Presto是一个Master-Slaves主从拓扑结构,一个完全分布式的Presto架构包括一个Coordinator节点和若干个Worker节点。

  1. Coordinator:Coordiantor节点部署在一个单独的节点上,是整个Presto集群的管理节点,主要工作是管理Presto集群,包括:接受PrestoCLI等提交的查询、查询语句的解析、查询计划的生成、任务调度等。
  2. Worker:Worker节点是Presto集群的工作节点,进行数据处理和任务执行,并定期向Coordinator发送心跳包。

查询模型

从PrestoCLI等客户端提交查询语句开始,Coordinator根据查询语句生成查询计划,进而生成可以执行的查询,一个查询计划包括以下几个组成部分:Stage、Task、Driver、Split、Operator、DataSource组成。

  1. Stage:执行查询阶段,RootStage将结果返回给Coordinator,SourceStage接受Coordinator的数据。
  2. Exchange:上下游Stage通过Exchange交换数据,主要包含量中Exchange,一种是OutputBuffer,用来生产数据,并通过此Exchange数据向下游Stage传递数据;另一种是ExchangeClient,下游Stage通过此Exchange消费数据。当Stage是SourceStage,则此Stage通过Operator和Connector进行数据交互。
  3. Split:大数据集中的一部分。
  4. Task:每个Task处理一个或多个Split。
  5. Driver:一个Task被分成一个或多个Driver,一个Driver处理一个Split。
  6. Page:Presto处理数据的最小数据单元,一个Page包含由字节数组组成的多个Block组成。存储一个字段的若干行,多个Block横切构成一个真实的一行数据。一个Page最大为1M,最多为16*1024行数据。

工作原理

Presto架构图

Presto架构图

Presto查询执行过程

  1. 提交查询
    Presto CLI等客户端通过HTTP协议将查询语句提价到Coordinator,接到SQL查询语句后,通过SQLParser将查询语句解析成Statement对象,如果语法解析有误,将在此阶段暴漏,如果无误将Statement封装成QueryStarter对象放入线程池中等待。
  2. 生成执行计划
    如果语法检查无误,通过逻辑查询计划器组件,查询metadata中的元数据信息,与第一步生成的语法树对应起来,生成物理逻辑查询树,如果有误,在此处暴漏。
  3. 生成物理执行计划
    如果第三步检查通过,会得到一个逻辑的查询计划,coordinate会根据是否有shuffle将逻辑查询计划拆分成subplan,最后转换成一个一个Task,每一个Task会将位置解析出来,并将Task交给执行Plan,并由Plan将Task分给Worker执行。

优势

  1. 完全基于内存的并行计算
  2. 流水线计算
  3. 本地化计算
  4. 动态编译执行计划
  5. GC控制
  6. 类BlinkDB的近似查询

缺点

因为Presto的全部数据是存在内存中的,限制了内存中数据集的大小,例如多个大表的join操作。因此,Presto是取代不了Hive的。

参考

  1. Presto官方文档:https://prestosql.io
  2. 美团团队的技术文章:https://tech.meituan.com/2014/06/16/presto.html
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值