美文网首页
presto入门

presto入门

作者: 飞_侠 | 来源:发表于2023-12-22 21:02 被阅读0次

presot要解决的问题


这些系统不允许你使用标准工具来查询和检视数据。面向特定系统的查询语言和分析工具比比皆是。

然而商业分析师已习惯使用业界标准——SQL,无数强大的工具依赖 SQL 来分析数据、创建仪表盘、制作富文本报告以及完成其他商业智能工作。
数据分散在各个孤岛上,其中有些系统甚至不能提供满足分析所需的查询性能,其他一些系统则将数据存储在单一庞大的系统上,因而不能像现代的云应用程序一样横向扩展。没有这样的能力,你就只能缩小潜在的使用场景和用户数量,因此降低了数据的实用价值。

presto来救场:
通过支持不同系统上的联邦查询、并行查询和横向集群扩展等功能,它还为我们提供了更多可能性。
Presto 是一个开源的分布式 SQL 查询引擎,它是为了高效查询不同系统和各种规模(从 GB 级到 PB 级)的数据源而从头开始设计和编写的一套系统。
Presto 使用分布式执行来快速查询海量数据。如果有 TB 级乃至 PB 级的数据需要查询,你可能会使用 Apache Hive 等工具,这些工具基于 Hadoop 和 Hadoop 分布式文件系统(Hadoop Distributed File System,HDFS)工作。

尽管 Presto 能理解并高效地执行 SQL,但它并不是一个数据库,因为它并不包含自己的数据存储系统。

Presto 同时使用了众所周知的技术和新颖的技术来执行分布式查询,这些技术包括内存并行处理、跨集群节点管线执行、多线程执行模型(以充分利用所有 CPU 核心)、高效的扁平内存数据结构(以最小化 Java 的垃圾回收)和 Java 字节码生成等。

SQL-on-Anything

image.png

Presto 在原地查询数据,无须事先将数据迁移集中到某个位置。因此,Presto 不仅可以查询 HDFS 和其他分布式对象存储系统中的数据,而且还可以查询 RDBMS 和其他数据源。无论数据存放在何处,Presto 都可以查询,因此它可以取代传统、昂贵和笨重的抽取–变换–加载(ETL)过程,至少可以帮你减轻相关任务的负担。

Presto 可以通过动态扩展计算集群的规模来扩展查询能力,并可以在数据源中数据所在的位置查询数据。借助这一特性,你可以极大地优化硬件资源需求并降低成本。

联邦查询是在一个语句中引用并使用不同数据库和模式(schema)的SQL 查询,这些数据库和 schema 来自于完全不同的系统。在同一条 SQL 查询中,可以查询 Presto 中可用的所有数据源。

Presto的架构

Presto 的查询执行模型、查询计划以及基于代价的查询优化算法。
Presto 通过在整个集群的服务器上分配处理任务来实现横向扩展,而非通过提高单台服务器性能来进行纵向扩展。这意味着,你可以通过添加更多的计算节点来获得更强大的处理能力。

image.png
  1. 协调器用于接受用户查询并管理工作节点以执行查询工作。
  2. 工作节点负责执行任务和处理数据。
  3. 协调器上通常会运行一个节点发现服务(discovery service),工作节点通过注册到此服务以加入集群。客户端、协调器和工作节点之间的通信和数据传输完全通过基于 HTTP/HTTPS 的 RESTful API 调用。

协调器为工作节点分配任务、更新状态并从工作节点获取顶层的结果集返回给用户。工作节点从数据源以及运行在其他节点上的上游任务中获取数据。
一个 Presto 集群至少包含一个协调器,可能包含一个或多个工作节点。
一旦接收到一条 SQL 语句,协调器就负责解析、分析、优化和调度查询任务在 Presto 工作节点上的执行,查询语句被翻译成一系列相连的任务(Task),这些任务被分发到各个工作节点上执行。在工作节点处理数据的同时,协调器会将结果抽取出来放到输出缓冲区中,并将缓冲区的内容暴露给客户端。一旦客户端读完输出缓冲区的内容,协调器就会代表客户端向工作节点请求更多的数据。另外,工作节点也在不断地与数据源交互并从中读取数据。最终,客户端不断地请求数据,工作节点则不断地从数据源读取数据并提供给客户端,直到查询执行结束。协调器、工作节点和客户端基于 HTTP 进行通信。

基于连接器的架构

Presto 存储与计算分离的核心是基于连接器的架构。连接器为 Presto 提供了连接任意数据源的接口。每个连接器在底层数据源上提供了一个基于表的抽象。只要数据可以用 Presto 支持的数据类型表示成表、列和行,就可以创建连接器并让查询引擎使用这些数据进行查询处理。

查询执行模型

SQL 语句首先以文本形式提交到协调器,协调器解析和分析这条语句,之后创建一个由 Presto 内部数据结构表示的执行计划,叫作查询计划。图 4-6 展示了这一流程。查询计划全面地表示了一条SQL 语句处理数据和返回结果所需进行的步骤。
image.png
  1. 协调器通过元数据 SPI 获取表、列和数据类型的信息。这些信息用于对查询进行语义校验、类型检查和安全检查。
  2. 统计 SPI 用于获取行数和表大小的信息,从而在计划期间进行基于代价的查询优化。
  3. 在创建分布式查询计划时会利用数据位置 SPI 来生成表内容的逻辑切片。切片是任务分配和并行的最小单位。
image.png

连接器

连接器将底层数据源(如 RDBMS、对象存储或键值存储)的查询和存储概念翻译成 SQL 和 Presto 中的表、列、行和数据类型的概念。它们可以是简单的 SQL 到 SQL 之间的转换和映射,也可以是更复杂的 SQL 到对象存储或 NoSQL 系统的转换,还可以是由用户定义的。

相关文章

网友评论

      本文标题:presto入门

      本文链接:https://www.haomeiwen.com/subject/maofndtx.html