这是我参与「第四届青训营 」笔记创作活动的第7天
Presto简介
OLAP(Online Analytical Processing)
OLAP对业务数据执行多维分析,提供复杂计算,趋势分析和复杂数据建模的能力。与MapReduce相比,OLAP引擎常通过SQL的形式,为数据分析提供统一的逻辑描述语言,实际的物理执行由具体的引擎进行转换和优化。
交互式处理引擎Presto
Presto最初是由Facebook研发的构建于Hadoop/HDFS系统之上的PB级交互式分析引擎。具备以下特点:
- 多租户任务的管理与调度
- 多数据源联邦查询
- 支持内存化计算
- Pipeline式数据处理
Presto基础原理与概念
基础概念
服务相关
- Coordinator:解析SQL语句,生成执行计划,分发执行任务给Worker
- Worker:执行Task处理数据,与其他Worker交互传输数据
数据源相关
- Connector:一个Connector代表一种数据源,适配多数据源的接口
- Catalog:管理元信息与实际数据的映射关系
Query相关
Query:基于SQL parser后获得的执行计划
Stage:根据是否需要Shuffle将Query拆分为不同的subplan,每个subplan便是一个stage
Fragment:基本等价与Stage
Task:单个Worker上的最小资源管理单元,一个节点上,一个stage只有一个task
Pipeline:stage切分为若干Operator集合,每个Operator集合定义一个Pipeline
Driver:Pipeline的可执行实体,是最小的执行单元
Split:输入数据描述,与Driver一一对应
Operator:最小的物理算子
数据传输相关
Exchange:表示不同stage之间的数据传输
LocalExchange:stage内的rehash操作,常用于提高并行处理数据的能力,默认值是16
核心组件架构
服务发现 Discovery Service
- worker配置文件配置Discovery Service地址
- worker节点启动后向Discovery Service注册
- Coordinator从Discovery Service获取worker的地址
通信机制
- Presto Client / JDBC Client与Server间通信:Http
- Coordinator与worker间通信:Thrift / Http
- Worker与Worker之间通信:Thrift / Http
Thrift比Http具有更好的数据编码能力和数据压缩率。
Presto重要机制
多租户资源管理
Resource Group:
- 类似Yarn多级队列的资源管理方式
- 基于CPU、MEMORY、SQL执行数进行资源使用量限制
优点:请两的Query级别的多级队列资源管理模式 缺点:存在一定滞后性,指挥对Group中正在运行的SQL进行判断
多租户任务调度
- Stage调度:相当于给stage做一个流式处理,上一个stage的部分计算结果会先输入到下一个stage进行计算
- Task调度:确定每个worker上的task的数量
- Split调度:按时间片轮循处理,split之间存在优先级,不同优先级分配时间占比不同
内存计算
- Pipeline化数据处理:更好实现算子间并行,语义上保证每个task内的数据流式处理
- Back Pressure Mechanism:控制Split生成流程,控制operator的执行
多数据源联邦查询
将各个数据源进行统一抽象,由presto server进行统一的物理执行。