这是我参与「第四届青训营 」笔记创作活动的的第9天
[第四届青训营笔记创作活动]
一、介绍
Presto 是 Facebook 推出的一个基于Java开发的大数据分布式 SQL 查询引擎,可对从 GB 到 PB 级的大数据进行交互式的查询,查询的速度达到商业数据仓库的级别,据称该引擎的性能是 Hive 的 10 倍以上。Presto 可以查询包括 Hive、Cassandra 甚至是一些商业的数据存储产品,单个 Presto 查询可合并来自多个数据源的数据进行统一分析。 Presto的架构实际上就是一套分布式的SQL执行架构,它最大的特点就是天然就是存储计算分离,Presto只负责计算,存储的部分由数据源自身提供,这种存储与计算分离的架构也非常符合当今云计算发展的趋势。
二、架构原理
Presto 的架构图如下:
1. 节点角色
-
coordinator
主要有以下几个功能:- 解析 SQL 语句
- 生成执行任务
- 分发执行任务给 Worker 节点
-
Worker
主要有以下几个功能:- 执行 Task 处理数据
- 与其它 Worker 交互传输数据
-
Connector
一个 Connector 就代表了一种数据源。可以认为 Connector 是由 Presto 提供的适配多数据源的统一接口。可以说,通过借助 Connector 机制,Presto可以将来自一切数据源的数据计算SQL化,实现多数据源关联分析(联邦查询)
2. 执行流程
当一个 SQL Query 进入到 Presto 系统中,分别完成了以下几个关键步骤,最终将结果输出:
- 接收 SQL Query 请求
- SQL 解析、语义分析(生成 AST )
- 生成执行计划、优化执行计划
- 划分 Stage、生成和调度 Task
- 在 Worker 上执行 Task
- 分批返回 Query 结果给客户端
三、核心组件
-
Discovery Service(服务发现)
- Worker 配置文件配置 Discovery Service 地址
- Worker 节点启动后会向 Discovery Service 注册
- Coordinator 从 Discovery Service 获取 Worker 的地址
-
通信机制
Presto 中各组件之间有以下几种通信方式:- Presto Client / JDBC Client 与 Server 之间:Http
- Coordinator 与 Worker 之间:Thrift / Http
- Worker 与 Worker 之间:Thrift / Http