浅析Presto架构 | 青训营笔记

126 阅读2分钟

这是我参与「第四届青训营」笔记创作活动的第2天

下面是我对Presto架构的一些自我认识

Presto简介

Presto概念

Presto是 Facebook 推出的一个开源的分布式SQL查询引擎,数据规模可以支持GB到PB级,主要应用于处理秒级查询的场景。Presto 的设计和编写完全是为了解决像 Facebook 这样规模的商业数据仓库的交互式分析和处理速度的问题。

Presto 应用场景

Presto支持在线数据查询,包括 Hive,关系数据库(MySQL、Oracle)以及专有数据存储。一条 Presto 查询可以将多个数据源的数据进行合并,可以跨越整个组织进行分析。

Presto架构

master/slave架构
  • coordinators 解析SQL语句,生成执行计划,分发执行任务给Worker节点执行。
  • workers 负责执行实际查询任务,访问底层存储系统。
  • Worker节点启动后向Discovery Server服务注册,Coordinator从Discovery Server获得可以正常工作的Worker节点。

image.png

优点

  1. 基于内存运算,减少了硬盘IO,计算更快。
  2. 能够连接多个数据源,跨数据源连表查,比如从Hive查询大量网站访问记录,然后从Mysql中匹配出设备信息。
  3. 部署也比 Hive 简单,因为 Hive 是基于 HDFS 的,需要先部署 HDFS。

image.png

缺点

  1. Presto能处理PB级别的海量数据分析,但Presto并不是把PB即数据都放在内存中计算。而是根据场景,如Count,AVG等聚合运算,是边堵数据边计算,再清理内存,再读数据再计算,这种内存耗的并不高。但是连表查,就可能产生大量的临时数据,因此速度会变慢。

Presto 数据模型

presto采取三层表结构

  1. catalog 对应某一类数据源,例如hive的数据,或mysql的数据
  2. schema 对应mysql中的数据库
  3. table 对应mysql中的表

presto的存储单元包括

  1. Block是一张表的一个字段对应的队列
  2. Page由Block构成,一个Page包含多个Block,多个Block横切为一行