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

101 阅读3分钟

这是我参与【第四届青训营】笔记创作活动的第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 基础原理与概念

image.png

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中服务发现、通信机制、节点状态等内容容易与其他内容混淆,需要进行思维导图绘制区分,对相关知识点更好进行理解和掌握。