Presto架构与优化 | 青训营笔记

186 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第4天


本节课程目录

  1. Presto概述
  2. Presto基础原理和概念
  3. Presto重要机制
  4. 性能优化实战

1. Presto概述

1.1 OLAP VS MapReduce
image.png
随着数据量增加和处理逻辑的复杂,使用更为简单的方法对数据进行处理越发重要
1.2 Presto 设计思想
image.png


2. Presto基础原理和概念

2.1 基础概念的介绍 image.png 服务相关分为CoordinatorWorker image.png 数据源相关分为ConnectorCatalog
image.png image.png Query相关,PipeLine中Exchange大多数意义下等价于Shuffle,LocalExchange代表Stage内的rehash操作,用于提高并行处理数据的能力 image.png task按照不同的算子分成不同的Pipeline,一个Pipeline代表一组数据的顺序处理,并行度可以简单理解成不同的Pipeline下的Driver数目之和

2.2 核心组件架构介绍
image.png image.png Coordinator通过从DiscovertyService获取Worker的地址 image.png 使用Thrift是因为http1.0不支持长连接,底层通信效率较差

节点状态: image.png Shutdown作用: 代表需要关闭在向Coordinator发送的一种关闭信号


3. Presto重要机制

1. 多租户资源管理 image.png image.png rootGroups:资源组的描述,包括名称、内存、并行度的限制等;
selectors:根据提交的信息对Group进行匹配,使用通配符进行匹配;
image.png 能匹配上的只有最后一个selector image.png 缺点:设置了一些限制,不能提前知道该Sql是否超过限制,只能在Sql运行的过程中进行判断

2. 多租户的任务调度
image.png image.png Stage调度:

  1. AllAtOnceExecutionPolicy(同时调度)(默认) 在当前stage计算的过程中,下一个stage对当前stage产生的数据进行处理,而不需要所有的数据处理完成之后交给下一个stage进行处理(不需要落盘)。

  2. PhasedExecutionPolicy(分阶段调度) image.png 不能同时调度,下一个阶段需要上一个阶段的数据,所以无法同时调度。

task调度: image.png image.png Fragment 0: 根据数据的大小来决定task数量
Fragment 1: Shuffle需要对应到不同的节点上, 所以为集群节点数量(一般为固定值), 节点数量越多并行度越高
有了task任务之后如何为task选择节点? image.png

Split调度
image.png

3. 内存计算
3.1 Pipeline化的数据处理
image.png

3.2 Back Pressure Mechanism
image.png

4. 多数据源联邦查询
image.png


4. 性能优化实战

**4.1 常用性能分析工具 ** Grafana: image.png Java相关指令: image.png Presto UI:
image.png

4.2 具体案例分析
image.png image.png copy函数存在问题 image.png

4.3 字节内部优化实战

  1. 多Coordinator调度
    image.png image.png
  2. History Server持久化
    image.png