这是我参与「第四届青训营 」笔记创作活动的第7天
本节课学习内容如下:
1、概述
2、Presto基础原理与概念
3、Presto重要机制
4、性能优化实战
概述
- 什么是大数据?
在信息化时代背景下,由于信息交互,信息存储,信息处理能力大幅增加而产生的数据
- 什么是OLAP?
OLAP(OnLine Analytical Processing)对业务数据执行多维分析,并提供复杂计算,趋势分析和复杂数据建模的能力。是许多商务智能(BI)应用程序背后的技术。现如今OLAP已经发展为基于数据库通过SQL对外提供分析能力
Presto设计理念
Presto最初是由facebook研发的构建于Hadoop/HDFS系统之上的PB级交互式分析引擎,其具有如下的特点:
- 多租户任务的管理与调度
- 多数据源联邦查询
- 支持内存化计算
- pipeline式数据处理
基础概念
- Presto基础概念主要可以分为哪几类?
- 服务相关概念
- 数据源相关概念
- Query相关概念
- 数据传输相关概念
- Presto的通信方式有哪些,Thrift通信的优势
Http 1.1 vs Thrift
Thrift具有更好的数据编码能力,Http 1.1还不支持头部信息的压缩,Thrift具有更好的数据压缩率
- Presto Worker的不同状态
- Active
- InActive
- Shutdown
重要机制
- Presto用户多租户隔离的手段是什么?
Presto 通过Resource Group对不同的用户创建不同Group从而实现不同租户,不同场景的资源管理
- Presto Resource Group的优缺点
优点:支持通配符的形式,对不同租户,不同提交场景下的用户进行限制
缺点:资源的管理和判断是以当前用户正在运行的SQL资源使用量为基准,对于低频大SQL场景不太适用
- Presto是从哪几个方面实现了多租户的任务调度
Stage调度策略
Task的节点选择策略
Split调度策略
- Presto Stage调度的方式:AllAtOnceExecutionPolicy 、 PhasedExecutionPolicy
- Presto 进行 Task 调度时,有哪些调度方式?
- HARD_AFFINITY: 计算、存储 Local 模式,保障计算与存储在同一个节点,减少数据传输
- SOFT_AFFINITY: 基于某些特定算法,如一致性HASH函数,常用于缓存场景,保证相似的 Task 调度到同一个 Worker
- NO_PREFERENCE: 随机选取,常用于普通的纯计算 Task
- Presto是如何实现Back pressure mechanism的
- 控制split生成流程 - 针对每个Task定时检查, 如果 OutputBuffers 使用率低于 0.5 (下游消费较快, 需要提高生产速度), Split 并发度+1
- 控制Operator执行速度
- "sink.max-buffer-size" 写入buffer的大小控制
- "exchange.max-buffer-size" 读取buffer的大小控制
- Buffer 达到最大值时Operator会进入阻塞状态
- Presto多数据源支持的优点与缺点
优点:支持多数据源的联邦查询
缺点:针对不同数据源,还存在许多问题需要解决
- 谓词下推
- 每个数据源都需要单独的一套catalog管理
- 如何针对数据源进行分片操作
性能优化实战
-
常用的性能分析工具
- Grafana
- Arthas
- Flame Figure(火焰图)
- java指令:jstack等指令
Arthas在presto常用哪些命令
- watch:监控每个函数入参、返回参数、异常等信息
2.trace:统计函数内每一步的执行时间
- 通过火焰图如何分析性能瓶颈
火焰图用于分析热点代码占用大量cpu,从而导致服务性能下降的情况。如下图,自底向上为调用关系。上层宽度越宽表示当前函数cpu耗时越久,我们关注最宽的函数调用。
个人总结:
通过本次课程的学习,了解到了Presto的基本原理及概念,并且知道了Presto内部的一直重要机构,以及了解了几个常用的性能分析工具。