这是我参与「第四届青训营」笔记创作活动的第6天,学习内容为《Presto架构原理与优化》,内容包括 OLAP概述、Presto基础原理和概念、Presto重要机制、性能优化实战。
本节课的重点为:Presto的基础概念和核心组件架构、Presto的重要机制。思维导图如下:
OLAP概述
- OLAP:对业务数据执行多维分析,并提供复杂计算,趋势分析和复杂数据建模能力,是许多商务智能(BI)应用程序背后的技术。基于数据库通过SQL对外提供分析能力;
- OLAP与MapReduce:MapReduce代表了抽象的物理执行模型,使用门槛较高;与Mapreduce Job相比,OLAP引擎通过SQL的形式,为数据分析、数据开发人员提供统一的逻辑描述语言,实际的物理执行由具体的引擎进行转换和优化;
- OLAP与流式处理区别:前者是在消费端,即流动的数据处理模型,后者是在生产端,即数据源是流数据;
- 常见的OLAP引擎:预计算引擎(空间换时间)、批式处理、流式处理、交互式处理(解决查询时延);
- Presto的特点:
- 多租户任务的管理与调度
- 多数据源联邦查询
- 支持内存化计算
- pipeline式数据处理
Presto基础原理和概念
基础概念
- 服务相关概念
- 数据源相关概念
- Query相关
- 数据传输相关
核心组件架构
- 服务发现Discovery Service:将coordinator和woker结合到一起的服务
- 通信机制:Thfirt/HTTP
- 节点状态:active、inactive、shutdown
Presto重要机制
多租户资源管理
- Resource Group:类似Yarn多级队列的资源管理方式;基于CPU、MEMORY、SQL执行数进行资源使用量限制,从而达到限制用户提交的目的;
- 优点:轻量(基于通配符或提交sql的session等简单配置文件自动的生成队列)的Query级别多级队列资源管理模式;
- 缺点:存在一定滞后性,只会对Group中正在运行的SQL进行判断(提交SQL,判断使用量是否超限制,只能对已经提交成功的SQL判断)。如果很慢的提交一条特别大的query,这一条query占很大资源30%,而实际只能承载10%,所以存在一定滞后。
多租户下的任务调度
- 物理计划生成:根据是否存在shuffle,切分成不同的stage;
stage调度
- 同时调度(默认方式):流式处理特点,内存计算可行(无需落盘)。延迟低,会存在任务空跑;
- 分阶段调度:批式处理特点,join查询(build端右表构建好hashtable后probe端才能对左表数据进行探查)。有一定延迟、节省部分资源。
task调度
- 确定task的数量;
- 调度方式有哪些:
- HARD_AFFINITY:计算存储在同一个节点,减少数据传输;
- SOFT_AFFINITY:基于某些特定算法,保证相似的Task调度到同一个worker(缓存场景);
- NO_PREFERENCE:随机选取,常用于普通的纯计算Task。
split调度
- 场景:query a 大,先提交;query b 小,后提交。如何判断b是否可以插队,如何让b插队?
- FIFO;
- 优先级调度(presto使用,因它是交互式引擎,快速响应):
- 固定时间片,轮训split处理数据;
- spilt间存在优先级;
- 优点:优先保证小Query快速执行;保障大Query存在固定比例的时机片,不会被完全饿死。
内存计算
pipeline化的数据处理
- 场景:LocalExchange;stage调度中的AllAtOnce;
- 流动的数据处理模式(不等于数据产生也是流式);
- 内部(按LocalExchange拆分):更好的实现算子间并行,语义上保证每个task内的数据流式处理。
Back Pressure Mechanism
- 流式数据处理,如果无限制上游消费数据供给下游,内存会爆掉,如何平衡?
- 控制源头产生速度、消费速度;
- 控制split生成流程:针对每个Task定时检查, 如果 OutputBuffers 使用率低于 0.5 (下游消费较快, 需要提高生产速度), Split 并发度+1;
- 控制operator的执行:"sink.max-buffer-size" 写入buffer的大小控制 + "exchange.max-buffer-size" 读取buffer的大小控制 + Buffer 达到最大值时Operator会进入阻塞状态。
多数据源联邦查询
- 将多个数据源进行统一的抽象,最后由presto server进行统一的物理执行;
- 元数据管理--分片任务管理--读取数据--写入数据--权限管理;
- 可以做表join之间的相互关联;
- 局限性:元数据管理与映射(每个connector管理一套元数据服务)、谓词下推、数据源分片(无法做到无损高并发,总是有额外的开销)。
性能优化实战
- 常用性能分析工具;
- 通过火焰图分析性能瓶颈;
- 具体案例分析。
课程总结: Presto是大数据领域常见的交互式处理引擎,具有多数据源联邦查询、多租户任务的管理与调度、内存化计算和pipeline化处理数据等特点。重点在于Presto的核心架构和上述特点的原理,此外,如何利用一些性能分析工具对Presto集群进行优化也是一个值得思考的问题。