Presto架构原理与优化 | 青训营笔记

152 阅读2分钟

Presto架构原理与优化 | 青训营笔记

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

  • 大数据与OLAP

OLAP 是 OLAP(在线分析处理)是许多商业智能 (BI) 应用程序背后的一项强大技术,它可以发现数据、报告查看功能、复杂的分析计算以及预测性“假设”场景、预算计划、预测计划。

大数据:因为信息化的快速发展。信息交换、信息存储、信息处理三个方面大幅度提升所增长的数据称之为大数据。

image.png

  • OLAP引擎的常见操作

  1. 上卷(Roll Up)/聚合:选定某些维度,根据这些维度来聚合事实,如果用SQL来表达就是select dim_a, aggs_func(fact_b) from fact_table group by dim_a.
  2. 下钻(Drill Down):上卷和下钻是相反的操作。它是选定某些维度,将这些维度拆解出小的维度(如年拆解为月,省份拆解为城市),之后聚合事实。
  3. 切片(Slicing、Dicing):选定某些维度,并根据特定值过滤这些维度的值,将原来的大Cube切成小cube。如dim_a in (‘CN’, ‘USA’)
  4. 旋转(Pivot/Rotate):维度位置的互换。

image.png

  • Presto基础概述

Presto是一个facebook开源的分布式SQL查询引擎,presto之所以能在各个内存计算型数据库中脱颖而出,在于以下几点:

  1. 清晰的架构,是一个能够独立运行的系统,不依赖于任何其他外部系统。例如调度,presto自身提供了对集群的监控,可以根据监控信息完成调度。
  2. 简单的数据结构,列式存储,逻辑行,大部分数据都可以轻易的转化成presto所需要的这种数据结构。
  3. 丰富的插件接口,完美对接外部存储系统,或者添加自定义的函数。
  • Presto执行过程

image.png

Presto 查询引擎是一个 Master-Slave 架构,主要包括:

  • Client:提交数据操作的窗口
  • Coordinator:负责解析 SQL 语句,生成执行计划,分发执行任务给 Worker 节点执行。
  • Discovery Server:通常内嵌于 Coordinator 节点中,用于发现 Worker 节点,存储可用 Server(即 Worker)列表开。
  • Connector Plugin:连接 Storag 元数据连接信息,支持 Hive、Kafka、MySQL 等数据源,可自定义。
  • Worker 节点:负责实际执行查询任务,负责与 HDFS 交互读取数据。 

 

查询流程如下:

  1. Client 使用 HTTP 协议发送一个 query 请求。
  2. 通过 Discovery Server 发现可用的 Server。
  3. Coordinator 构建查询计划(通过 Anltr3 解析为 AST(抽象语法树),然后通过 Connector 获取原始数据的 Metadata 信息,生成分发计划和执行计划)。
  4. Coordinator 向 Worker 发送任务。
  5. Worker 通过 Connector 插件读取数据。
  6. Worker 在内存里执行任务(Worker 是纯内存型计算引擎)。
  7. Worker 将数据返回给 Coordinator,汇总之后再响应客户端。

(待补充)