这是我参与「第四届青训营 」笔记创作活动的的第九天
哈喽大家好,今天的学习内容是Presto 架构原理与优化介绍
01.概述
大数据与OALP系统的演进
什么是大数据
关于大数据我们参考马丁·希尔伯特的总结:大数据其实是在2000年后,因为信息化的快速发展、信息交换、信息存储、信息处理三个方面能力的大幅增长而产生的数据。
- 信息交换
通信和网络带宽的大幅增长 - 信息存储
计算机存储量的大幅增长 - 信息处理
整理、转换、分析数据的能力大幅增长
Hadoop:基于廉价机器的存算分离的大规模分布式处理系统(cpu性能好的进行计算,差的进行存储)
1.谷歌在2003、2004年发布Google File System论文,Mapreduce论文
2.2008年,Hadoop成为apache顶级项目
OLAP对业务数据执行多维分析,并提供复杂计算,趋势分析和复杂数据建模的能力。
常见的OLAP引擎:
- 预计算引擎: Kylin,Druid
- 批式处理引擎: Hive,Spark
- 流式处理引擎: Flink
- 交互式处理引擎: Presto,Clickhouse,Doris
Presto 设计思想
Presto 最初是由Facebook研发的构建于Hadoop/HDFS系统上的PB级交互式分析引擎。
特点:
- 多租户任务的管理与调度
- 多数据源联邦查询
- 支持内存化计算
- Pipeline式数据处理
02.Presto 基础原理与概念
此处可以查阅上篇文章
Presto 架构原理与优化介绍课前学习|青训营笔记 - 掘金 (juejin.cn)
03.Presto 重要机制
多租户资源管理
Resource Group
· 类似于Yarn多级队列的资源管理方式
· 基于CPU、MEMORY、SQL执行数进行资源使用量限制
优点: 轻量的Query级别的多级队列资源管理模式
缺点: 存在一定的滞后性,只会对Group中正在运行的SQL进行判断
多租户下的任务调度
物理计划生成
1.Antlr4解析生成AST
2.转换成Logical Plan
3.按照是否存在Shuffle,切分成不同的Stage
任务调度
- Stage调度
调度策略和分阶段调度 - Task调度
Task的数量与节点的确定 - Split调度
FIFO
优先级调度:快速响应
内存计算
· Pipeline化的数据处理:更好的实现算子间的并行,保证了每个Task内的数据流式处理 · Back pressure Mechanism:控制split生成流程与operator的执行
多数据源联邦查询
将各个数据源进行统一的抽象,最后由presto server进行统一的物理执行。
局限性:
- 元数据管理与映射
- 调词下推
- 数据源分片
具体案例分析由于篇幅原因在此就不展开分析,好了,今天的学习到这里就结束了,感谢阅读。