Presto是什么?
:分布式SQL查询引擎
Presto的特点?
1.基于内存的计算,减少了不必要的I/O操作,提高了查询速度
2.可连接多个数据源(如MySQL,Oracle,Kafka等等),实现多数据源关联查询
Presto的应用场景?
1.加速hive的查询
2.为不具备SQL查询功能的存储工具提供SQL查询
3.构建虚拟的统一数据仓库,实现多数据源关联查询
4.作为数据迁移和ETL工具
5.基于数据快照的实时计算
6.数据平台的临时查询
7.作为BI报表引擎
8.元数据的数据质量校验
9.海量结构化数据与半结构化数据分析
10.海量多维数据聚合
11.不支持多个大表的join关联查询
Presto中的角色及工作流程?
角色:
- Coordinator,负责接收SQL Query,解析SQL,生成和优化执行计划,生成和调度Task到Worker上。Coordinator将一个完整的Query,拆分成了多个Stage,每个Stage拆分出多个可以并行的Task。
- Worker,负责执行Coordinator发给它的Task,有部分Task负责到外部存储系统拉取数据,这部分Task会先执行,之后再执行那些负责计算的Task。从上图中可以看到,拉取数据的Task是在右侧两个Worker上执行的,负责计算的Task是在左侧一个Worker上执行的
工作流程:
- 第一步:接收SQL Query请求
- 第二步:SQL解析、语义分析(生成AST)
- 第三步:生成执行计划、优化执行计划
- 第四步:划分Stage、生成和调度Task
- 第五步:在Presto Worker上执行Task(有从数据源拉取数据的Task,也有计算为主的Task),生成结果
- 第六步:分批返回Query结果给客户端
图解: