这是我参与「第四届青训营 」笔记创作活动的第4天
本节课程目录
- Presto概述
- Presto基础原理和概念
- Presto重要机制
- 性能优化实战
1. Presto概述
1.1 OLAP VS MapReduce
随着数据量增加和处理逻辑的复杂,使用更为简单的方法对数据进行处理越发重要
1.2 Presto 设计思想
2. Presto基础原理和概念
2.1 基础概念的介绍
服务相关分为Coordinator和Worker
数据源相关分为Connector和Catalog
Query相关,PipeLine中Exchange大多数意义下等价于Shuffle,LocalExchange代表Stage内的rehash操作,用于提高并行处理数据的能力
task按照不同的算子分成不同的Pipeline,一个Pipeline代表一组数据的顺序处理,并行度可以简单理解成不同的Pipeline下的Driver数目之和
2.2 核心组件架构介绍
Coordinator通过从DiscovertyService获取Worker的地址
使用Thrift是因为http1.0不支持长连接,底层通信效率较差
节点状态:
Shutdown作用: 代表需要关闭在向Coordinator发送的一种关闭信号
3. Presto重要机制
1. 多租户资源管理
rootGroups:资源组的描述,包括名称、内存、并行度的限制等;
selectors:根据提交的信息对Group进行匹配,使用通配符进行匹配;
能匹配上的只有最后一个selector
缺点:设置了一些限制,不能提前知道该Sql是否超过限制,只能在Sql运行的过程中进行判断
2. 多租户的任务调度
Stage调度:
-
AllAtOnceExecutionPolicy(同时调度)(默认) 在当前stage计算的过程中,下一个stage对当前stage产生的数据进行处理,而不需要所有的数据处理完成之后交给下一个stage进行处理(不需要落盘)。
-
PhasedExecutionPolicy(分阶段调度)
不能同时调度,下一个阶段需要上一个阶段的数据,所以无法同时调度。
task调度:
Fragment 0: 根据数据的大小来决定task数量
Fragment 1: Shuffle需要对应到不同的节点上, 所以为集群节点数量(一般为固定值), 节点数量越多并行度越高
有了task任务之后如何为task选择节点?
Split调度
3. 内存计算
3.1 Pipeline化的数据处理
3.2 Back Pressure Mechanism
4. 多数据源联邦查询
4. 性能优化实战
**4.1 常用性能分析工具 **
Grafana:
Java相关指令:
Presto UI:
4.2 具体案例分析
copy函数存在问题
4.3 字节内部优化实战
- 多Coordinator调度
- History Server持久化