大数据问题
1.用于数据的存储机制的增多,有关系数据库,NoSQL数据库,文档数据库,键值存储,对象存储系统等。在现在的大数据架构中,其中许多是必需的,并且不再只能使用其中之一。 处理这么多类型的数据这项工作可能让人感到不知所措。

2.所有这些不同的系统都不一定让你使用标准工具查询和检查数据,且有不同查询语言和分析工具,您的业务分析师一般习惯于行业标准SQL。众多强大的工具依靠SQL进行分析,创建仪表板,丰富报告和其他商业情报工作。
3.数据分布在各个孤岛上,其中一些数据库的查询性能无法满足您的分析需求所需的性能。甚至一些系统将数据存储在无法水平扩展的系统中。
Presto功能
解决以上问题
Presto是一个开源的分布式SQL查询引擎。以针对各种规模的不同数据源有效地查询数据,范围从千兆字节到PB。
专为性能和规模而设计
Presto是一种工具,旨在通过使用分布式数据库来有效查询大量数据。如果您要查询TB甚至PB的数据,则很可能使用与Hadoop及其Hadoop Dis-交互的工具如Apache Hive贡献文件系统(HDFS)。Presto旨在替代这些工具,更有效地查询该数据
Presto利用著名技术和新颖技术进行分布式查询。这些技术包括内存中并行处理,流水线执行集群中节点之间的逻辑,一个多线程执行模型来保持所有CPU核心繁忙,高效的平面内存数据结构,以最大程度地减少Java垃圾收集,和Java字节码生成。
分离数据存储和查询计算资源
Presto不是带有存储的数据库;相反,它只是查询数据所在的位置。使用Presto时,存储和计算是分离的,可以独立扩展。Presto代表计算层,而底层数据源代表存储层。
这使Presto可以扩展和缩减其计算资源以进行查询处理,根据分析需求访问此数据。无需移动数据,并根据当前查询的确切需求配置计算和存储,或者根据您不断变化的查询需求定期进行更改。
Presto可以通过动态扩展计算集群来扩展查询能力,并可以直接查询数据在数据源中的位置。该特性允许您可以极大地优化硬件资源需求,从而降低成本
Presto特点

Presto架构

Coordinator
作用:接收查询请求,解析查询语句,生产查询执行计划,任务调度和Worker管理
Worker
执行被分解后的查询任务:Task
Presto执行查询模型

Stage
一个Query会被拆分成具有层级关系的多个Stage,一个Stage代表查询计划中的某个部分
每个Query都有一个Root Stage,该Stage用于聚集所有其他Stage的输出数据,并将最终数据反馈给终端用户。
Stage分4种
1.Coordinator_Only:用于执行DDL或者DML语句
2.Single:用于聚合子Stage的输出数据,并将最终数据输出给终端用户
3.Fixed:用于接受其子Stage产生的数据并在集群中对数据进行分布式的聚合和分组计算
4.Source:直接连接数据源
Exchange
Stage 通过Exchange来连接另一个Stage,用于完成上下游之间的数据交换,
分别是 Output Buffer 和 Exchange Client
OutputBuffer:生产数据传送给下游
ExchangeClient:消费的数据从上游Stage读取
Task
一个Stage被分为多个Task,从而可以 并行的执行一个Stage,一个Task也可以被分解成为一个或多个Driver,从而并行的执行一个Task
Driver
一个Task包含一个或者多个Driver,一个Driver是 一系列Operator的集合
Operator
一个Operator代表对一个Split的一种操作,例如 过滤,加权,转换,一个Operator依次读取一个Split中的数据,将Operator所代表的计算和操作作用于Split的数据上,并产生输出,每个Operator会以Page为最小处理单位分别读取输入数据和产生输出数据,Opeator 每次只会读取一个Page对象,每次也只会产生一个Page对象
Split
一个分片是一个大的数据集中的一个小的子集,Source Stage 通过Connector从数据源获取多个分片,
当Presto 执行一个查询的时候,首先会从Coordinator得到一个表对应的所有Split,然后Presto会根据查询执行计划,选择合适的节点运行相应的Task处理 Split
Page
Page是Presto中处理的最小数据单元,一个Page对象包含多个Block对象,每个Block对象是一个字节数组,

Presto RESTFUL服务
presto集群中的数据传输,节点通信,心跳感应,计算监控,计算调度和计算分布 都是基于RESTful服务实现
框架为 Airlift
https://github.com/airlift/airlift
Presto的提交查询流程

文档信息
- 本文作者:Jessica
- 本文链接:https://jessica0530.github.io/2020/09/15/Presto%E5%9F%BA%E7%A1%80/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)