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

99 阅读3分钟

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

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

一、 Presto 基础概念

  1. Coordinator(负责调度):

    • 解析SQL语句
    • ⽣成执⾏计划
    • 分发执⾏任务给Worker节点执⾏
  2. Worker 在一个presto集群中,存在一个coordinator节点和多个worker节点,coordinator节点是管理节点,而 worker节点就是工作节点,在每个worker节点上都会存在一个worker服务进程,该服务进程主要进行数 据的处理以及task的执行,worker服务进程每隔一定的时间都会向coordinator上的服务发送心跳,接 受调度。当客户端提交一个查询的时候,coordinator则会从当前存活的worker列表中选择出适合的 worker节点去运行task,而worker在执行每个task的时候又会进一步对当前task读入的每个split进行 一系列的操作和处理

  3. Discovery Service(将coordinator和woker结合到一起的服务):

    • Worker节点启动后向Discovery Server服务注册
    • Coordinator从Discovery Server获得Worker节点

所有的worker都把自己注册到Discovery Server上,Discovery Server是一个发现服务的service, Discovery Server发现服务之后,coordinator便知道在集群中有多少个worker能够工作,分配工作到 worker时便有了根据

  1. Connector Presto通过Connector来支持多数据源,一个Connector代表一种数据源,如Hive Connector代表了对Hive数据源的支持。可以认为Connector是由Presto提供的适配多数据源的统一接口

  2. Catalog 针对不同的数据源,Connector和Catalog是一一对应的关系,Catalog包含了schema和data source的映射关系。

  3. Query 基于SQL parser后获得的执行计划

  4. Stage 根据是否需要shuffle将Query拆分成不同的subplan,每一个subplan便是一个stage

  5. Fragment 基本等价于Stage,属于在不同阶段的称呼,在本门课程可以认为两者等价

  6. Task 单个 Worker 节点上的最小资源管理单元: 在一个节点上, 一个 Stage 只有一个 Task, 一个 Query 可能有多个Task

  7. Pipeline Stage 按照 LocalExchange 切分为若干 Operator 集合, 每个 Operator 集合定义一个 Pipeline

二、 核心组件

Presto 架构图

image.png

1. 服务发现(Discovery Service)

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

image.png

2. 通信机制

  1. Presto Client/JDBC Client与Service间通信

· Http

  1. Coordinator与Worker间的通信

· Thrift/Http

  1. Worker与Worker间的通信 · Thrift/Http

三、 重要机制

1. 多租户资源管理

1.1 Case

假设某个用户提交一个sql:

提交方式:Presto-cli(Presto客户端)

提交用户: zhangsan

提交SQL:

select customer——type, avg(cost)
as a from test_table group by
customer_type order by a limit 10;

1.2 Resource Group

  • 类似Yarn多级队列的资源管理方式
  • 基于CPU、MEMORY、SQL执行数进行资源使用量限制 优点:
  1. 轻量的Query级别的多级队列资源管理模式 缺点:
  2. 存在一定的滞后性,只会对Group中正在运行的SQL进行判断

2. 多租户下的任务调度

2.1 物理计划生成

  1. Antlr4解析生成AST
  2. 转换成Logical Plan
  3. 按照是否存在Shuffle(Exchange),切分成不同的Stage(Fragment) 提交SQL:
select customer——type, avg(cost)
as a from test_table group by
customer_type order by a limit 10;

image.png

2.2 Presto Stage调度方式

  1. Stage调度
  2. Task调度
  3. Split调度