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

166 阅读5分钟

这是我参与「第四届青训营」笔记创作活动的第6天,学习内容为《Presto架构原理与优化》,内容包括 OLAP概述、Presto基础原理和概念、Presto重要机制、性能优化实战。


本节课的重点为:Presto的基础概念和核心组件架构、Presto的重要机制。思维导图如下:

7.Presto架构原理与优化介绍.png

OLAP概述

  1. OLAP:对业务数据执行多维分析,并提供复杂计算,趋势分析和复杂数据建模能力,是许多商务智能(BI)应用程序背后的技术。基于数据库通过SQL对外提供分析能力;
  2. OLAP与MapReduce:MapReduce代表了抽象的物理执行模型,使用门槛较高;与Mapreduce Job相比,OLAP引擎通过SQL的形式,为数据分析、数据开发人员提供统一的逻辑描述语言,实际的物理执行由具体的引擎进行转换和优化;
  3. OLAP与流式处理区别:前者是在消费端,即流动的数据处理模型,后者是在生产端,即数据源是流数据;
  4. 常见的OLAP引擎:预计算引擎(空间换时间)、批式处理、流式处理、交互式处理(解决查询时延);
  5. Presto的特点:
  1. 多租户任务的管理与调度
  2. 多数据源联邦查询
  3. 支持内存化计算
  4. pipeline式数据处理

Presto基础原理和概念

基础概念

见学习手册

  • 服务相关概念
  • 数据源相关概念
  • Query相关
  • 数据传输相关

核心组件架构

image.png

  • 服务发现Discovery Service:将coordinator和woker结合到一起的服务
  • 通信机制:Thfirt/HTTP
  • 节点状态:active、inactive、shutdown

Presto重要机制

多租户资源管理

  1. Resource Group:类似Yarn多级队列的资源管理方式;基于CPU、MEMORY、SQL执行数进行资源使用量限制,从而达到限制用户提交的目的;
  2. 优点:轻量(基于通配符或提交sql的session等简单配置文件自动的生成队列)的Query级别多级队列资源管理模式;
  3. 缺点:存在一定滞后性,只会对Group中正在运行的SQL进行判断(提交SQL,判断使用量是否超限制,只能对已经提交成功的SQL判断)。如果很慢的提交一条特别大的query,这一条query占很大资源30%,而实际只能承载10%,所以存在一定滞后。

多租户下的任务调度

  1. 物理计划生成:根据是否存在shuffle,切分成不同的stage;

stage调度

  1. 同时调度(默认方式):流式处理特点,内存计算可行(无需落盘)。延迟低,会存在任务空跑;
  2. 分阶段调度:批式处理特点,join查询(build端右表构建好hashtable后probe端才能对左表数据进行探查)。有一定延迟、节省部分资源。

task调度

  1. 确定task的数量;
  2. 调度方式有哪些:
  1. HARD_AFFINITY:计算存储在同一个节点,减少数据传输;
  2. SOFT_AFFINITY:基于某些特定算法,保证相似的Task调度到同一个worker(缓存场景);
  3. NO_PREFERENCE:随机选取,常用于普通的纯计算Task。

split调度

  1. 场景:query a 大,先提交;query b 小,后提交。如何判断b是否可以插队,如何让b插队?
  2. FIFO;
  3. 优先级调度(presto使用,因它是交互式引擎,快速响应):
  1. 固定时间片,轮训split处理数据;
  2. spilt间存在优先级;
  3. 优点:优先保证小Query快速执行;保障大Query存在固定比例的时机片,不会被完全饿死。

内存计算

pipeline化的数据处理

  1. 场景:LocalExchange;stage调度中的AllAtOnce;
  2. 流动的数据处理模式(不等于数据产生也是流式);
  3. 内部(按LocalExchange拆分):更好的实现算子间并行,语义上保证每个task内的数据流式处理。

Back Pressure Mechanism

  1. 流式数据处理,如果无限制上游消费数据供给下游,内存会爆掉,如何平衡?
  2. 控制源头产生速度、消费速度;
  3. 控制split生成流程:针对每个Task定时检查, 如果 OutputBuffers 使用率低于 0.5 (下游消费较快, 需要提高生产速度), Split 并发度+1;
  4. 控制operator的执行:"sink.max-buffer-size" 写入buffer的大小控制 + "exchange.max-buffer-size" 读取buffer的大小控制 + Buffer 达到最大值时Operator会进入阻塞状态。

多数据源联邦查询

  1. 将多个数据源进行统一的抽象,最后由presto server进行统一的物理执行;
  2. 元数据管理--分片任务管理--读取数据--写入数据--权限管理;
  3. 可以做表join之间的相互关联;
  4. 局限性:元数据管理与映射(每个connector管理一套元数据服务)、谓词下推、数据源分片(无法做到无损高并发,总是有额外的开销)。

性能优化实战

性能优化实战.png

  1. 常用性能分析工具;
  2. 通过火焰图分析性能瓶颈;
  3. 具体案例分析。

课程总结: Presto是大数据领域常见的交互式处理引擎,具有多数据源联邦查询、多租户任务的管理与调度、内存化计算和pipeline化处理数据等特点。重点在于Presto的核心架构和上述特点的原理,此外,如何利用一些性能分析工具对Presto集群进行优化也是一个值得思考的问题。