Presto架构原理 | 青训营笔记

110 阅读3分钟

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

Presto简介

OLAP(Online Analytical Processing)

OLAP对业务数据执行多维分析,提供复杂计算,趋势分析和复杂数据建模的能力。与MapReduce相比,OLAP引擎常通过SQL的形式,为数据分析提供统一的逻辑描述语言,实际的物理执行由具体的引擎进行转换和优化。

交互式处理引擎Presto

Presto最初是由Facebook研发的构建于Hadoop/HDFS系统之上的PB级交互式分析引擎。具备以下特点:

  • 多租户任务的管理与调度
  • 多数据源联邦查询
  • 支持内存化计算
  • Pipeline式数据处理

Presto基础原理与概念

基础概念

服务相关

  • Coordinator:解析SQL语句,生成执行计划,分发执行任务给Worker
  • Worker:执行Task处理数据,与其他Worker交互传输数据

image.png

数据源相关

  • 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

核心组件架构

image.png

服务发现 Discovery Service

  1. worker配置文件配置Discovery Service地址
  2. worker节点启动后向Discovery Service注册
  3. Coordinator从Discovery Service获取worker的地址

通信机制

  1. Presto Client / JDBC Client与Server间通信:Http
  2. Coordinator与worker间通信:Thrift / Http
  3. 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进行统一的物理执行。