Presto 架构原理与优化介绍
这是我参与「第四届青训营 」笔记创作活动的第2天
概述
大数据:在信息化时代背景下,由于信息交互,信息存储,信息处理能力大幅增加而产生的数据
OLAP (OnLine Analytical Processing) 对业务数据执行多维分析,并提供复杂计算,趋势分析和复杂数据建模的能力。
是许多商务智能(BI)应用程序背后的技术。现如今OLAP已经发展为基于数据库通过SQL对外提供分析能力
存算分离:存储与计算不在同一台设备上 —— 性能较好的设备用于计算,存储量大的设备用于存储
OLAP vs. MapReduce
OLAP
从纬度和度量连个角度分析数据
OLAP引擎
Presto
Presto最初是由facebook研发的构建于Hadoop/HDFS系统之上的PB级交互式分析引擎
其具有如下的特点:
- 多租户任务的管理与调度
- 多数据源联邦查询
- 支持内存化计算
- pipeline式数据处理
Presto 基础原理与概念
基础架构
Query 相关
Exchange:stage间
LocalExchange:stage内
核心组件架构
通信机制
节点状态
- Active
- Inactive
- Shutdown(状态):发出结束任务的信号,设定限制时间,在限制时间内仍能处理剩余数据
Presto 重要机制
多租户资源管理
多租户下的任务调度
1. Stage调度策略
2. Task的节点选择策略
调度方式:
-
HARD_AFFINITY: 计算、存储 Local 模式,保障计算与存储在同一个节点,减少数据传输
-
SOFT_AFFINITY: 基于某些特定算法,如一致性HASH函数,常用于缓存场景,保证相似的 Task 调度到同一个 Worker
-
NO_PREFERENCE: 随机选取,常用于普通的纯计算 Task
3. Split调度策略
内存计算
多数据源的联邦查询
优点:支持多数据源的联邦查询
- 缺点:针对不同数据源,还存在许多问题需要解决
- 谓词下推
- 每个数据源都需要单独的一套catalog管理
- 如何针对数据源进行分片操作
性能优化实战
性能分析工具
1. Grafana
2. Jstack
3. JMX
4. Presto UI
5. Flame Figure
通过火焰图如何分析性能瓶颈:
火焰图用于分析热点代码占用大量cpu,从而导致服务性能下降的情况。如下图,自底向上为调用关系。上层宽度越宽表示当前函数cpu耗时越久,我们关注最宽的函数调用。