这是我参与「第四届青训营 」笔记创作活动的的第36天
Presto架构原理与优化
概述
基于廉价机器的存算分离分布式处理系统:Hadoop
Map数据转换,Reduce数据聚合、清洗
OLAP(Online Analytical Processing):对业务数据执行多维分析,并提供复杂计算,趋势分析和复杂数据建模
核心概念:维度、度量
Presto:构建于HDFS系统的交互式分析引擎
- 多租户任务的管理与调度
- 多数据源联邦查询
- 支持内存化计算
- Pipeline式数据处理
Presto基础原理和概念
-
黄色:数据源;绿色:Presto服务(进程或线程);蓝色:用户端,提交sql query
-
Coordinator
- 解析SQL语句
- 生成执行计划
- 分发执行任务给Worker节点
-
Worker
- 执行Task处理数据
- 与其他Worker交互传输数据
-
Connector
- 一个Connector代表一种数据源。适配多数据源的接口
-
Catalog
- 管理元信息与实际数据的映射关系。哪一个topic对应哪一个表的哪个分区
Stage:节点间数据传输(Shuffle),每一个计算可以称为一个stage。将query拆分成不同的subplan,每一个subplan就是一个stage
Task:单个Worker节点上的最小资源管理单元
-
Pipeline
- Stage按照LocalExchange(单节点内的shuffle操作),切分为若个Operator集合,每个Operator集合定义一个Pipeline
-
Driver
- Pipeline的可执行实体,最小的执行单元
-
Split
- 输入数据描述。与Driver一一对应
-
Operator
- 最小的物理算子
-
Exchange & LocalExchange
- Exchange:表示不同Stage间的数据传输,等价于shuffle
- Stage内的rehash操作,提高并行处理数据的能力
-
Discovery service
- Worker注册,Coordinator获取Worker信息
-
通信机制
- Http1.1 VS Thrift:Thrift具有更好的数据编码能力,Http1.1不支持头部信息的压缩
Presto重要机制
多租户任务调度
物理计划生成
- 解析生成AST
- 转换成Logical Plan
- 按照是否存在Shuffle(Exchange),切分成不同的Stage(Fragment)
部分聚合 -> 整体聚合,部分->整体需要shuffle