《Learning and Operating Presto 》第一章:Presto介绍

在过去几年里,用户和机器产生的不同数据日益增多,这给希望理解数据以做出更好决策的组织带来了新的挑战。成为一个以数据驱动为核心的组织对于发现见解、推动变革并开辟新机遇至关重要。虽然这需要大量数据,但其带来的好处是值得努力的。

这大量数据以不同格式存在,由不同数据源提供,并可通过不同的查询语言进行搜索。此外,在寻找有价值的见解时,用户需要迅速获得结果,因此需要高性能的查询引擎系统。这些挑战促使像Facebook(现在是Meta)、Airbnb、Uber和Netflix等公司重新思考它们如何管理数据。它们逐渐从基于数据仓库的旧范式转向数据湖仓。虽然数据仓库管理结构化和历史数据,但数据湖仓也能够管理和从非结构化和实时数据中获取见解。

Presto是解决上述挑战的一种可能方案。Presto是一种分布式SQL查询引擎,由Facebook规模化创建并使用。您可以轻松集成Presto到您的数据湖中,以构建快速运行的SQL查询,与数据在物理位置上无关,无论其原始格式如何。

本章将向您介绍数据湖的概念以及它与数据仓库的区别。然后,您将了解Presto是什么,为什么它被创建,以及为什么许多公司使用它。您还将了解最流行的Presto用例,如即席查询、报告和仪表板。最后,您将熟悉贯穿所有章节的案例研究。

数据仓库和数据湖

有三种主要的数据类型:结构化数据、半结构化数据和非结构化数据。表1-1展示了这些数据类型,包括简短描述、典型格式、优缺点以及一些实际示例。

根据所支持的数据类型以及它们的组织和处理方式,存在不同的数据存储系统。数据仓库是一个仅包含结构化数据的中央存储库,用于报告和分析。图1-1展示了数据仓库的一般架构。它包括四个主要层次:

  1. 结构化数据 包括由多个来源提供的结构化数据(例如,关系数据库系统)。
  2. 抽取、转换和加载(ETL) 将数据转换为适当格式的过程。
  3. 数据仓库 包含准备好供最终层次使用的数据。
  4. 报告、仪表板和数据挖掘 最终层次,消耗存储在数据仓库中的数据。

随着大数据时代的到来,支持数据仓库的底层架构已经被证明无法有效管理大量数据。像Facebook这样的大公司在使用数据仓库时遇到了以下问题:

  1. 非结构化数据 由于数据仓库管理的是结构化数据,因此它无法用于存储原始的非结构化数据,例如文本或音频。在将非结构化数据导入数据仓库之前,必须对其进行处理。
  2. 可扩展性 随着导入的数据量和分析处理的增长,数据仓库的技术成本会呈非线性增加。
  3. 实时数据 数据仓库不适用于准实时数据,因为数据在使用之前必须经过结构化处理。

数据湖解决了这些问题。图1-2展示了数据湖的一般架构。

与数据仓库不同,数据湖管理并提供了处理结构化、半结构化和非结构化数据的方式。导入原始数据使数据湖能够在原始存储系统中导入历史和实时数据。随着时间的推移,数据湖的概念演变为数据湖仓,即一个增强型的数据湖,其顶部包含对事务的支持。在实践中,数据湖仓修改了数据湖中现有的数据,遵循数据仓库的语义。我们将在第五章讨论数据湖仓的概念并进行实现。

早期的数据湖称为本地数据湖,安装在公司服务器上。这种类型的数据湖的主要优势是公司对系统的完全控制。随着云计算的出现,数据湖已经迁移到云端,将管理、维护和安全性问题留给云提供商及其客户,双方都负责其数据的安全性。这被称为云数据湖,并且其受欢迎度正在增长。提供云数据湖的主要平台包括亚马逊云服务(AWS)、Azure和谷歌云通过一种称为对象存储的东西。

为了使数据对上层(仪表板、报告和数据挖掘)可访问,数据湖提供了一个中间层,称为元数据和治理,它保证了数据的一致性和安全性控制。

Presto在数据湖中的作用

Presto是一个开源的分布式SQL查询引擎,支持结构化和半结构化数据源。您可以使用Presto直接在数据所在的位置(如数据湖)查询数据,无需将数据移动到另一个系统。Presto通过基于内存的架构并发运行查询,使其速度非常快且可扩展。

在数据湖架构中,您可以将Presto看作是治理和元数据层的一部分。Presto在内存中直接执行查询,避免了在各个阶段之间进行磁盘写入和读取,最终加快了查询执行时间。

Presto协调器机器分析使用SQL编写的任何查询(支持ANSI SQL标准),在连接到数据湖的一组Presto工作机器上创建和调度查询计划,然后返回查询结果。查询计划可能有多个执行阶段,具体取决于查询。例如,如果您的查询涉及连接多个大表,它可能需要多个阶段来执行,对表进行聚合。您可以将这些中间结果看作是长时间计算问题的草稿本。

Presto的起源和设计考虑因素

Presto是由Facebook于2012年实施,旨在解决源自Apache Hive的问题。Apache Hive是建立在Hadoop MapReduce框架之上连接到其数据湖的分布式SQL引擎。Apache Hive当时是Facebook使用的数据仓库之一。Apache Hive的主要问题包括在处理大量数据时速度较慢。

为了克服这些问题,Facebook开发了Presto,这是一个新的分布式SQL查询引擎,设计为一种内存引擎,无需为单个查询持久保存中间结果集。这种方法导致了一个处理相同查询速度快数个数量级的查询引擎,许多查询的延迟在一秒以下完成。最终用户,如工程师、产品经理和数据分析师,发现他们可以交互式地查询大型数据集的子集,以测试假设并创建可视化效果。

图1-3展示了Presto和Hive执行查询的方式。Hive使用MapReduce框架运行查询。在实践中,它将中间结果存储到磁盘:在map和reduce阶段之后,中间结果都被存储到磁盘上。相反,Presto通过在工作机器的内存中执行查询来节省时间,包括在那里对中间数据集执行操作,而不是将它们持久保存到磁盘。

2013年,Facebook将Presto的GitHub存储库以Apache 2.0许可证的形式开源。随后,Facebook将该项目捐赠给由Linux Foundation托管的Presto Foundation,这是Linux Foundation下属的一个子基金会。

Presto的开发考虑了以下设计要点:高性能、高可扩展性、遵循美国国家标准协会(ANSI)SQL标准、数据源的联邦性,以及在云中运行的能力。

高性能

Presto定义了多个规则,包括众所周知的优化,如谓词和限制下推、列修剪以及解耦。在实践中,Presto可以智能地选择将查询处理的多少下推到数据源,这取决于数据源的能力。例如,一些数据源可能能够评估谓词、聚合、函数评估等。通过将这些操作推送到数据更接近的位置,Presto通过最小化磁盘I/O和网络数据传输,实现了显著改进的性能。查询的其余部分,如在不同数据源之间联接数据,将由Presto处理。

高扩展性

由于其架构,您将在接下来的部分中看到,Presto可以在任何规模上运行,尽管大型基础设施并非必需。您还可以在小型环境或处理较大数据集之前用于原型设计。由于其极低的延迟,运行小查询并不会产生主要开销。

符合ANSI SQL标准

Presto运行符合ANSI SQL标准的SQL查询。由于大多数用户已经知道如何编写SQL查询,Presto易于访问,无需学习新的语言。Presto的SQL兼容性立即支持大量用例。

数据源的联邦性

联邦查询引擎映射到多个数据源,实现对这些系统的统一访问,无论是逐个查询单个数据源还是进行联合查询涉及多个数据源。

Presto是一种支持可插拔连接器的联邦查询引擎,可用于访问来自外部数据源的数据,并向其写入数据,而这些数据源可能位于任何地方。有许多数据源可与Presto集成。

图1-4说明了查询引擎处理联邦查询的基本步骤。一旦接收到查询,查询引擎会解析它(查询解析)并访问源目录以选择涉及查询的数据源或多个数据源(数据源选择)。因此,源选择将查询分解为子查询。

接下来的步骤涉及构建逻辑计划(查询优化),该计划定义了查询的执行方式以及应该使用哪些运算符(JOIN、UNION、FILTER等)。逻辑计划的一个示例是基于树的计划,其中树的叶子对应要执行的子查询,而内部节点表示运算符。

逻辑计划被转换为物理计划(查询执行),该计划在所选的数据源上实际执行查询。最终将单个子查询的输出进行协调以构建最终结果(查询协调)。

在云中运行

您可以在由您的公司部署的集群中运行Presto,也可以使用现有的云服务。有许多云服务提供了运行Presto的选项,包括Amazon Elastic MapReduce(EMR)和Google Dataproc。其他供应商,如IBM,将Presto作为开放数据湖仓套件的一部分提供,从而更容易设置和操作多个Presto集群以满足不同的用例。

Presto架构和核心组件

图1-5展示了Presto的架构,部署为两个主要服务:一个单一的协调器和许多工作节点。协调器服务实际上是操作的核心,从客户端接收查询请求,解析查询,构建执行计划,然后在许多工作节点之间调度要执行的任务。协调器包含三个主要组件:解析器、计划器和调度器。

每个工作节点并行处理整个查询的一部分,您可以根据需求添加工作节点服务到Presto中。每个数据源都配置为一个目录,您可以在每个查询中查询尽可能多的目录。

您可以以三种不同的方式配置Presto:

  1. 仅使用一个数据源 用户可以使用Presto查询单个数据源。在这种情况下,Presto成为一个独立的查询引擎,使用外部目录的元数据并处理存储在数据湖中的数据。
  2. 独立查询多个数据源 作为一个联邦引擎,您可以看到连接到多个数据源的许多Presto部署。这允许最终用户一次只查询一个数据源,使用相同的界面而无需在不同系统之间切换或将其视为不同的数据系统。
  3. 关联并一起查询多个数据源 将联邦引擎推进一步,一个查询可以组合来自两个或多个数据源的数据。这样做的好处是使最终用户能够分析更多数据,而无需将数据移动或复制到单个数据源中。

表1-2概述了不同配置提供的好处。单一数据源仅提供快速分析。配置为具有多个数据源的Presto,每个独立查询,提供快速的联邦分析。最后,如果Presto配置为具有多个数据源,这些数据源关联并一起查询,它将提供快速、联邦和统一的分析。

Presto的替代方案

研究界提出了许多Presto的替代方案。研究的重点是构建一个快速、可扩展的分布式查询引擎,能够处理大数据。鉴于大数据的持续增长,像Presto及其替代方案这样的解决方案已经成为行业非常吸引人的选择。

Apache Impala

Apache Impala最初由Cloudera开发,是用于Apache Hadoop的分布式SQL查询引擎。您可以使用Apache Impala处理中等大小的数据集,尽管它不支持一些SQL操作,例如UPDATE和DELETE。Amazon Web Services和MapR都支持Apache Impala。

Apache Hive

Apache Hive是用于使用SQL语法查询的大型数据集的数据仓库软件。基于Apache Hadoop,Hive支持不同的数据格式,如逗号和制表符分隔值(CSV/TSV)文本文件、Apache Parquet等。您可以通过自定义连接器扩展Hive以支持其他数据格式。您还可以与Presto一起使用Hive。

Spark SQL

Spark SQL是为Apache Spark构建的模块,用于处理结构化数据。您还可以将其用作分布式SQL查询引擎,并且可以将其与Spark的其他模块集成。

Trino

在Presto项目的创始人于2018年离开Facebook时,原始项目PrestoDB(在本书中描述)被分叉成一个独立的项目,称为PrestoSQL。2021年,PrestoSQL被重新品牌为Trino。 与Presto类似,Trino的目标是运行快速且联邦的查询,而无需从源复制和移动数据到临时存储。

Presto用户案例

Presto最初设计用于交互式分析和即席查询。随着技术的发展和准实时数据的可用性,应用Presto的用例数量有所增加。在本节中,您将了解Presto的最常见用例。

报告和仪表板

与第一代静态版本不同,今天的交互式报告和仪表板有很大区别。分析师、数据科学家、产品经理、营销人员等用户不仅想查看关键性能指标(KPI)、产品统计、遥测数据等数据,而且还想深入研究特定的兴趣领域或可能存在机会的领域。

Presto赋予用户能力,使他们能够自己跨数据源查询数据,而不必依赖数据平台工程师。它还通过为数据平台工程师提供单一端点,整合了许多报告和仪表板工具,包括Tableau、Graphana、Apache Superset等,极大地简化了工程师的任务。

即席查询

工程师、分析师、数据科学家和产品经理可以手动定制他们的查询,也可以使用各种可视化、仪表板和商业智能(BI)工具。根据所选择的工具,他们可以针对Presto集群运行许多复杂的并发查询。使用Presto,他们可以通过对任何位置的数据集进行交互式探索,快速迭代创新的假设。

使用SQL进行ETL

分析师可以跨多个数据源汇总数千亿字节的数据,并使用Presto对该数据运行高效的ETL(抽取、转换和加载)查询。与传统的批处理系统不同,您可以使用Presto运行资源高效且高吞吐量的查询。

与运行交互式作业相比,批处理ETL作业中运行查询在数据量和CPU方面要昂贵得多。由于集群往往要大得多,一些公司将Presto集群分为两组:一组用于ETL,另一组用于即席查询。这在操作上是有利的,因为这两个集群使用相同的Presto技术并需要相同的技能。

数据湖仓

数据湖使您能够按原样存储所有结构化和非结构化数据,并对其运行不同类型的分析。数据湖仓具有SQL工作负载以及其他非SQL工作负载(例如,对非结构化数据进行机器学习)。Presto处理SQL工作负载。您可以使用Presto直接在数据湖上运行SQL查询,而无需移动或转换数据。

实时数据库进行实时分析

实时分析通常涉及将实时捕获的数据与历史或存档数据结合起来。想象一下,一个电商网站使用两个存储库:第一个存储库是,例如,存储您过去活动的Amazon S3存储桶,第二个是存储您实时活动的Apache Pinot实时存储,如购物车的内容。

此外,想象一下,您当前会话的活动定期从实时存储移至历史存档。在给定的瞬间,您当前会话的活动可能不会进入S3。通过使用Presto在两个系统之间合并数据,网站可以向您提供实时的激励,以防止您放弃购物车,或者它可以更早更准确地确定是否发生可能的欺诈行为。

介绍我们的案例研究

您可以在不同的场景中使用Presto,包括数据挖掘分析、高性能商业智能分析和实时监控。为了展示Presto的功能,我们构建了一个虚构的场景,将在本书中尽可能多地使用。 假设一家电商公司提供销售或分发一些产品的服务,例如图书、服装和其他物品。为了代表这项服务,我们将使用与Presto完全兼容的Transaction Processing Performance Council Benchmark H(TPC-H)数据库。

TPC-H数据库定义了八个表,如图1-6所示。图中的箭头显示了这些表之间的关系。TPC-H数据库定义了一个通用的电商场景,您可以用于测试目的,具有可变数量的数据。

  • 实时客户活动

定义由客户生成的实时事件,例如购物车中的产品

  • 产品数据库

包含产品目录

这两个数据源都被摄入到数据湖中。定期,实时客户活动被移动到数据湖的特定部分,称为归档活动。Presto访问数据湖执行不同类型的查询。在顶层是报告、仪表板和数据挖掘服务。

总结

在本章中,您了解了Presto是什么以及它在数据湖中的作用。Presto是一个并行分布式SQL查询引擎,用于查询任何数据格式:结构化、半结构化或非结构化。您可以使用Presto在大数据背景下运行使用ANSI SQL的查询,这是一种单一标准和众所周知的语言。您还可以在需要高性能和高可扩展性以及在云中运行的场景中使用Presto。 现在您已经了解了Presto背后的基本概念,包括其架构、如何运行联邦查询以及其用例。现在,您应该能够通过安装和运行Presto来进一步了解。 在第二章,您将学习如何开始使用Presto,重点是如何使用Docker和Kubernetes安装和配置Presto。

相关推荐
?crying29 分钟前
蓝队基础1 -- 企业信息架构与安全基础
安全·架构
mit6.82432 分钟前
[Docker#9] 存储卷 | Volume、Bind、Tmpfs | -v/mount | MySQL 灾难恢复 | 问题
linux·运维·docker·容器·架构
小_太_阳32 分钟前
hadoop_yarn详解
大数据·hadoop·yarn
Data-Miner1 小时前
大数据湖项目建设方案(100页WORD)
大数据·big data
AI服务老曹2 小时前
不仅能够实现前后场的简单互动,而且能够实现人机结合,最终实现整个巡检流程的标准化的智慧园区开源了
大数据·人工智能·深度学习·物联网·开源
徐小夕3 小时前
Flowmix/Docx 多模态文档编辑器:V1.3.5版本,全面升级
前端·javascript·架构
Smile丶凉轩3 小时前
微服务即时通讯系统的实现(客户端)----(1)
微服务·云原生·架构
管理大亨3 小时前
大数据微服务方案
大数据
脸ル粉嘟嘟4 小时前
大数据CDP集群中Impala&Hive常见使用语法
大数据·hive·hadoop
宝哥大数据4 小时前
数据仓库面试题集&离线&实时
大数据·数据仓库·spark