Presto架构原理与优化 | 青训营笔记
这是我参与「第四届青训营 」笔记创作活动的第2天
-
大数据与OLAP
OLAP 是 OLAP(在线分析处理)是许多商业智能 (BI) 应用程序背后的一项强大技术,它可以发现数据、报告查看功能、复杂的分析计算以及预测性“假设”场景、预算计划、预测计划。
大数据:因为信息化的快速发展。信息交换、信息存储、信息处理三个方面大幅度提升所增长的数据称之为大数据。
-
OLAP引擎的常见操作
- 上卷(Roll Up)/聚合:选定某些维度,根据这些维度来聚合事实,如果用SQL来表达就是select dim_a, aggs_func(fact_b) from fact_table group by dim_a.
- 下钻(Drill Down):上卷和下钻是相反的操作。它是选定某些维度,将这些维度拆解出小的维度(如年拆解为月,省份拆解为城市),之后聚合事实。
- 切片(Slicing、Dicing):选定某些维度,并根据特定值过滤这些维度的值,将原来的大Cube切成小cube。如dim_a in (‘CN’, ‘USA’)
- 旋转(Pivot/Rotate):维度位置的互换。
-
Presto基础概述
Presto是一个facebook开源的分布式SQL查询引擎,presto之所以能在各个内存计算型数据库中脱颖而出,在于以下几点:
- 清晰的架构,是一个能够独立运行的系统,不依赖于任何其他外部系统。例如调度,presto自身提供了对集群的监控,可以根据监控信息完成调度。
- 简单的数据结构,列式存储,逻辑行,大部分数据都可以轻易的转化成presto所需要的这种数据结构。
- 丰富的插件接口,完美对接外部存储系统,或者添加自定义的函数。
-
Presto执行过程
Presto 查询引擎是一个 Master-Slave 架构,主要包括:
- Client:提交数据操作的窗口
- Coordinator:负责解析 SQL 语句,生成执行计划,分发执行任务给 Worker 节点执行。
- Discovery Server:通常内嵌于 Coordinator 节点中,用于发现 Worker 节点,存储可用 Server(即 Worker)列表开。
- Connector Plugin:连接 Storag 元数据连接信息,支持 Hive、Kafka、MySQL 等数据源,可自定义。
- Worker 节点:负责实际执行查询任务,负责与 HDFS 交互读取数据。
查询流程如下:
- Client 使用 HTTP 协议发送一个 query 请求。
- 通过 Discovery Server 发现可用的 Server。
- Coordinator 构建查询计划(通过 Anltr3 解析为 AST(抽象语法树),然后通过 Connector 获取原始数据的 Metadata 信息,生成分发计划和执行计划)。
- Coordinator 向 Worker 发送任务。
- Worker 通过 Connector 插件读取数据。
- Worker 在内存里执行任务(Worker 是纯内存型计算引擎)。
- Worker 将数据返回给 Coordinator,汇总之后再响应客户端。