Presto 架构原理与优化介绍 | 青训营

127 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第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 可以自定义了三项数据
    1. CpuQuota:使用cpu时间片配额。
    2. MemoryQuota:使用内存配额。
    3. query并发数:一个组可以并发执行查询个数。

多租户下的任务调度

  • Stage的调度策略:
    • PhasedExecutionPolicy:分阶段调度 司时调度
    • AllAtOnceExecutionPolic:一次性把所有的Stage都调度 分阶段调度
  • Task的调度策略:根据应用场景确定Task的数量
  • Split的调度策略:FIFO、优先级调度

内存计算

  • 允许纯内存计算
  • Back Pressure Mechanism
    • 控制split生成流程
    • 控制operator的执行

多数据源联邦查询

  • 将多个数据源进行统一的抽象,由presto server进行统一的物理执行。

性能优化实战

  • 如何衡量某个任务某个Stage的真实并行度
    • 答:在不同Pipeline下Split (Driver)的数目之和。
  • Grafana (用于可视化大型测量数据的开源程序):埋点、系统指标如CPU、内存、网络等的可视化界面,时序化的数据展示
  • JVM调优