这是我参与「第四届青训营 」笔记创作活动的的第6天
概念
一个Coordinator节点,一个Discovery Server节点,多个Worker节点
- Coordinator(负责调度)
- 解析SQL语句
- 生成执行计划
- 分发执行任务给Worker节点执行
- Worker
- Discovery Service(将coordinator和woker结合到一起的服务):
- Worker节点启动后向Discovery Server服务注册
- Coordinator从Discovery Server获得Worker节点
- Exchange
- Localexchange
在一个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执行数进行资源使用量限制
多租户下的任务调度——物理计划生成
- 解析SQL生成AST
- 转换成Logical Plan
- 按照是否存在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 : 顺序相应, 绝对公平
-
优先级调度: 快速响应
-