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

320 阅读2分钟

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

概念

一个Coordinator节点,一个Discovery Server节点,多个Worker节点

  • Coordinator(负责调度)
    • 解析SQL语句
    • 生成执行计划
    • 分发执行任务给Worker节点执行
  • Worker
  • Discovery Service(将coordinator和woker结合到一起的服务):
    • Worker节点启动后向Discovery Server服务注册
    • Coordinator从Discovery Server获得Worker节点
  • Exchange
  • Localexchange

image.png

image.png

在一个presto集群中,存在一个coordinator节点和多个worker节点,coordinator节点是管理节点,而worker节点就是工作节点,在每个worker节点上都会存在一个worker服务进程,该服务进程主要进行数据的处理以及task的执行,worker服务进程每隔一定的时间都会向coordinator上的服务发送心跳,接受调度。

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

核心组件介绍

服务发现 Discovery Service

通信机制

  • Client 和 Server间: Http
  • Coordinator 与 Worker : Thrift / Http
  • Worker 与 Worker : Thrift

节点状态

  • ACTIVE
  • INACTIVE
  • SHUTDOWN

Presto机制

多租户资源管理——Resource Group

  • 类似Yarn多级队列的资源管理方式
  • 基于CPU、MEMORY、SQL执行数进行资源使用量限制

多租户下的任务调度——物理计划生成

  1. 解析SQL生成AST
  2. 转换成Logical Plan
  3. 按照是否存在Shuffle(Exchange),切分成不同的Stage(Fragment)

多租户下的任务调度——Stage调度

PhasedExecutionPolicy: 不代表每个Stage都分开调度

  • 例如Join:
    • Build端:右表构建用户join的hashtable
    • Probe端:对用户左表数据进行探查,需要等待build端完成
    • BUild端构建hashtable端时,probe端一直空跑

AllAtOnceExcutionPolicy : 延迟低,会存在任务空跑

PhasedExecutionPolicy: 有一定延迟、节省部分资源

  • Task调度

    • HARD_AFFINITY:计算、存储 Local 模式,保障计算与存储在同一个节点,减少数据传输
    • SOFT_AFFINITY:基于某些特定算法,如一致性HASH函数,常用于缓存场景,保证相似的 Task 调度到同一个 Worker
    • NO_PREFERENCE:随机选取,常用于普通的纯计算 Task
  • Split调度

    • FIFI : 顺序相应, 绝对公平

    • 优先级调度: 快速响应