这是我参与「第四届青训营 」笔记创作活动的第 9 天!
概述
- Presto 设计思想:
- Presto 最初是由 Facebook 研发的构建于 Hadoop/HDFS 系统之上的 PB 级交互式分析引擎,具有以下特点:
- 多租户任务的管理和调度
- 多数据源联邦调查
- 支持内存化计算
- Pipeline 式数据处理
- Presto 最初是由 Facebook 研发的构建于 Hadoop/HDFS 系统之上的 PB 级交互式分析引擎,具有以下特点:
Presto 基础原理
基础概念
服务相关
- Coordinator
- 解析 SQL 语句
- 生成执行计划
- 分发执行任务给 Worker 节点
- Worker
- 执行 Task 处理数据
- 与其他 Worker 交互传输数据
数据源相关
- Connector
- 一个 Connector 代表一种数据源。可以认为 Connector 是由 Presto 提供的适配多数据源的统一接口。
- Catalog
- 管理元信息与实际数据的映射关系
Query 相关
- Query
- 基于 Query parser 后获得的执行计划
- Stage
- 根据是否需要 Shuffle 将 Query 拆分成不同的 subplan,每一个 subplan 便是一个 stage
- Fragment
- 基本等价于 Stage,属于在不同阶段的称呼,在此认为两者等价
- Task
- 单个 Worker 节点上的最小资源管理单元:在一个节点上,一个 Satge 只有一个 Task,一个 Query 可能有多个 Task
- Pipeline
- Stage 按照 localExchange 切分为若干 Operator 集合,每个 Operator 集合定义一个 Pipeline
- Driver
- Pipeline 的可执行实体,Pipeline 和 Driver 的关系可类比程序和进程,是最小的执行单元,通过火山迭代模型执行每一个 Operator
- Split
- 输入数据描述(数据实体是 Page),数量上和 Driver 一一对实际数据源 应,不仅代表数据源 split,也代表了不同 Stage 间传输的数据
- Operator
- 最小的物理算子
数据传输相关
- Exchange:
- 表示不同 Stage 间的数据传输,大多数意义下等价于 Shuffle
- LocalExchange:(默认数值是 16)
- Stage 内的 rehash 操作,常用于i提高并行处理数据的能力(Task 在 Presto 中只是最小的容器,而不是最小的执行单元)
- 多租户下的任务调度
- 衡量某个任务某个 Stage 的真实并行度
- 在不同的 Pipeline 下 Split(Driver)的数目之和
- 衡量某个任务某个 Stage 的真实并行度
核心组件架构介绍
- Presto 架构图
服务发现
- Discovery Service
- Worker 配置文件配置 Discovery Service 地址
- Worker 节点启动后会向 Discovery Service 注册
- Coordinator 从 Discovery 获取 Worker 的地址
通信机制
- Presto Client / JDBC Client 与 Server 间通信
- Http
- Coordinator 与 Worker 间的通信
- Thrift / Http
- Worker 与 Worker 间的通信
- Thrift / Http
- Http 1.1 VS Thrift
- 前者不支持头部信息的压缩
- 后者具有更好的数据编码能力和数据压缩率
- 节点状态
- ACTIVE
- INATIVE
- SHUTDOWN
Shutdown 状态的作用
- Graceful Shutdown(优雅的扩缩容):
总结
1.从服务、数据源、Query、数据传输四个角度,介绍了 Presto 相关的基础概念
- 服务、数据源、Query、数据传输包含哪些基本概念
- 如何衡量一个任务的并行度(Task 并不是最小的执行单元) 2。通过服务发现、通信机制、节点状态三方面介绍了 Coordinator 与 Worker 是如何协调和工作的