这是我参与「第四届青训营 」笔记创作活动的第6天。
Presto概述
- 设计思想:基于HDFS分布式文件系统上的PB级数据交互式分析引擎
- 特点:多租户、多数据关联查询、支持内存计算、查询性能是Hive的10倍以上。
Presto基础原理和概念
基础组件
- Coordinator:接收客户端的SQL,解析SQL,生成并优化物理执行计划,分发job给worker。
- Worker:执行Task处理数据、与其他Worker交互传输数据。
- Connector :一个Connector代表一种数据源,是由Presto提供的适配多数据源的统一接口。
- Schema:类似mysql数据库,是一种组织tables的方式,包含的table类似于mysql的表。
- Catalog:管理元信息与实际数据的映射关系,包含Connector和Schema。
Query相关
- Query:Presto解析SQL成Query后,创建分布式的执行计划。
- Stage:根据是否需要shuffle将Query拆分成不同的subplan,每一个subplan便是一个stage。
- Task:单个Worker节点上的最小资源管理单元,在一个节点上, 一个Stage只有一个Task,一个Query可能有多个Task。
- Split:输入数据描述(数据实体是Page),数量上和Driver一一对应,不仅代表实际数据源split,也代表了不同stage间传输的数据。
- Pipeline:Stage按照LocalExchange切分为若干Operator集合,每个Operator集合定义一个Pipeline。
- Driver:Pipeline的可执行实体,Pipeline和Driver的关系可类比程序和进程, 是最小的执行单元,通过火山迭代模型执行每个Operator。
- Operator:最小的物理算子,用于消费、转换和生产数据。
数据传输相关
- Exchange :表示不同Stage间的数据传输,大多数意义下等价于Shuffle。
- LocalExchange :Stage 内的rehash操作,用于提高并行处理数据的能力( Task在Presto中只是最小的容器,而不是最小的执行单元),LocalExchange的默认数值是16。
Presto重要机制
多租户资源管理
- 资源管理是提交sql的前提
- Resource Group:类似Yarn多级队列的资源管理方式,基于CPU、内存、SQL 执行数进行资源使用量限制,按用户划分资源组,一个组管理一个用户所有查询。
- 每个 Group 可以自定义了三项数据
- CpuQuota:使用cpu时间片配额。
- MemoryQuota:使用内存配额。
- query并发数:一个组可以并发执行查询个数。
多租户下的任务调度
- Stage的调度策略:
- PhasedExecutionPolicy:分阶段调度 司时调度
- AllAtOnceExecutionPolic:一次性把所有的Stage都调度 分阶段调度
- Task的调度策略:根据应用场景确定Task的数量
- Split的调度策略:FIFO、优先级调度
内存计算
- 允许纯内存计算
- Back Pressure Mechanism
- 控制split生成流程
- 控制operator的执行
多数据源联邦查询
- 将多个数据源进行统一的抽象,由presto server进行统一的物理执行。
性能优化实战
- 如何衡量某个任务某个Stage的真实并行度
- 答:在不同Pipeline下Split (Driver)的数目之和。
- Grafana (用于可视化大型测量数据的开源程序):埋点、系统指标如CPU、内存、网络等的可视化界面,时序化的数据展示
- JVM调优