这是我参与【第四届青训营】笔记创作活动的第6天
一、本堂课重点内容
1.Presto设计理念介绍
2.Presto基础概念与原理介绍
3.Presto重要机制详解
4.Presto常用的优化工具与企业实践
二、详细知识点介绍
2.1 常见的OLAP引擎:
·预计算引擎,eg:Kylin,Druid
·批式处理引擎,eg:Hive,Spark
·流式处理引擎,eg:Flink
·交互式处理引擎,eg:Presto,Clickhouse,Doris
2.2 Presto特点:
(1)多租户任务的管理与调度
(2)多数据源联邦查询
(3)支持内存化计算
(4)Pipeline式数据处理
2.3 Presto 基础原理与概念
Connector: 一个Connector代表一种数据源,是由Presto提供的适配多数据源的统一接口
Catalog: 管理元信息与实际数据的映射关系
Query: 基于SQL parser 后获得的执行计划
Stage: 根据是否需要shuffle将Query拆分成不同的subplan,每一个subplan便是一个stage
Fragment: 基于等价于Stage,属于在不同阶段的称呼,在本门课程可以认为两者等价
Task: 单个Worker节点上的最小资源管理单元:在一个节点上,一个Stage只有一个Task,一个Query可能有多个Task
Pipeline: Stage按照LocalExchange切分为若干Operator集合,每个Operator集合定义一个Pipeline
Driver: Pipeline的可执行实体,Pipeline和Driver的关系可类比程序和进程,是最小的执行单位,通过火山迭代模型执行每一个Operator
Split: 输入数据描述,数量上和Driver一一对应,不仅代表实际数据源split,也代表了不同stage间传输的数据
Operator: 最小的物理算子
Exchange: 表示不同Stage间的数据传输,大多数意义下等价于Shuffle
LocalExchange: Stage内的rehash操作,常用于提高并行处理数据的能力,默认数值为 16.
2.4 通信机制
(1)Presto Client/JDBC Client与Server间通信
(2)Coordinator 与 Worker间的通信
(3)Worker 与 Worker 间的通信
2.5 Case介绍
假设某用户提交一个sql:
提交方式:Presto-cli
提交SQL:select customer_type, avg(cost) as a from test_table group by customer_type order by a limit 10;
2.6 Stage调度
典型应用场景:(1)Bulid 端 (2)Probe端 (3)Build 端构建hashtable端时,probe端一直空跑
2.7 Split调度
FIFO:顺序执行,绝对公平
优势:(1)优先保证小Query快速执行 (2)保障大Query存在固定比例的时间片
三、实践练习例子
正则表达式时完全由用户输入的,不可中断,阻塞了Split的优先级调度
`public static void main(String[] args) throws InterruptedException
{
final Pattern pattern=Pattern.compile("(0*)*A");
final String input="000000000000000000000000000";
long startTime = System.currentTimeMillis();
pattern.matcher(input).find(0);
System.out.println("Regex took:"+(System.currentTimeMillis()-startTime) + "ms");
} `
四、课后个人总结
本章中Presto相关的基础概念和重要机制不容易掌握,Coordinator与Worker中服务发现、通信机制、节点状态等内容容易与其他内容混淆,需要进行思维导图绘制区分,对相关知识点更好进行理解和掌握。