学习 Presto(一):Presto 简介

简介

Presto is an open source distributed SQL query engine for running interactive analytic queries against data sources of all sizes ranging from gigabytes to petabytes.

Presto 是一个开源的分布式 SQL 查询引擎,用于对 GB 到 PB 量级的数据源,进行交互式查询。

官网地址:https://prestodb.io/

与 Presto 相类似的产品有:Apache Hive、Apache Impala

Presto 被称为“SQL on Everything”,因为 Presto 通过其 Connector 支持包括 MySQL、Hive、Kafka 和 Cassandra 等多种数据源

国外使用 Presto 的公司主要有:Facebook(Creator)、Airbnb、Dropbox 等

国内使用 Presto 公司主要由:京东、美团、唯品会等,京东 JD-Presto 研发团队出版了目前市面上唯一一本关于 Presto 的书籍:《Presto 技术内幕》

Presto 开发非常活跃,版本更新速度较快,本文基于 Presto 0.166

架构

Presto 架构图:

presto_architecture

Presto 采用了主从(Master-Slave)架构:

主节点 Presto Coordinator,解析 SQL 语句、生成查询执行计划、管理 Worker 节点等

从节点 Presto Worker,执行 Task、处理数据等

查询执行模型

Statement 即 SQL 语句。Presto 支持符合 ANSI 标准的 SQL语句,文档:https://prestodb.io/docs/0.166/sql.html

Query 即查询执行计划。Presto 解析 SQL 语句,生成查询执行计划。查询执行计划代表可以在 Presto 集群上运行的查询,由运行在各个 Worker 节点且相互关联的 Stage 组成。

Stage 即查询执行阶段。

Exchange 用于完成上下游关系的 Stage 的数据交换。

Task 是实际运行在 Presto 各个 Worker 节点上的任务。

Driver 是作用于 Split 上的一系列 Operator 的集合。

Operator 代表对 Split 的操作,例如:过滤、转换等。

Split 即分片。

Page 是 Presto 中处理的最小数据单元。

参考:Presto 0.166 文档 https://prestodb.io/docs/0.166/

参考:《Presto 技术内幕》