在曩昔几年里,用户和机器发生的不同数据日益增多,这给期望了解数据以做出更好决策的安排带来了新的应战。成为一个以数据驱动为中心的安排关于发现见地、推进革新并开辟新机遇至关重要。虽然这需求很多数据,但其带来的优点是值得努力的。

这很多数据以不同格局存在,由不同数据源供给,并可经过不同的查询语言进行搜索。此外,在寻找有价值的见地时,用户需求敏捷获得成果,因而需求高性能的查询引擎体系。这些应战促进像Facebook(现在是Meta)、Airbnb、Uber和Netflix等公司从头思考它们怎么办理数据。它们逐步从依据数据仓库的旧范式转向数据湖仓。虽然数据仓库办理结构化和前史数据,但数据湖仓也可以办理和从非结构化和实时数据中获取见地。

Presto是解决上述应战的一种或许计划。Presto是一种分布式SQL查询引擎,由Facebook规模化创立并运用。您可以轻松集成Presto到您的数据湖中,以构建快速运转的SQL查询,与数据在物理方位上无关,不管其原始格局怎么。

本章将向您介绍数据湖的概念以及它与数据仓库的差异。然后,您将了解Presto是什么,为什么它被创立,以及为什么许多公司运用它。您还将了解最流行的Presto用例,如即席查询、陈述和仪表板。最后,您将熟悉贯穿一切章节的事例研讨。

数据仓库和数据湖

有三种首要的数据类型:结构化数据、半结构化数据和非结构化数据。表1-1展现了这些数据类型,包括简略描绘、典型格局、优缺点以及一些实践示例。

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

依据所支撑的数据类型以及它们的安排和处理方法,存在不同的数据存储体系。数据仓库是一个仅包括结构化数据的中心存储库,用于陈述和剖析。图1-1展现了数据仓库的一般架构。它包括四个首要层次:

  1. 结构化数据 包括由多个来历供给的结构化数据(例如,关系数据库体系)。
  2. 抽取、转化和加载(ETL) 将数据转化为恰当格局的过程。
  3. 数据仓库 包括准备好供终究层次运用的数据。
  4. 陈述、仪表板和数据发掘 终究层次,消耗存储在数据仓库中的数据。

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

跟着大数据时代的到来,支撑数据仓库的底层架构现已被证明无法有用办理很多数据。像Facebook这样的大公司在运用数据仓库时遇到了以下问题:

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

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

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

与数据仓库不同,数据湖办理并供给了处理结构化、半结构化和非结构化数据的方法。导入原始数据使数据湖可以在原始存储体系中导入前史和实时数据。跟着时刻的推移,数据湖的概念演变为数据湖仓,即一个增强型的数据湖,其顶部包括对业务的支撑。在实践中,数据湖仓修改了数据湖中现有的数据,遵循数据仓库的语义。咱们将在第五章评论数据湖仓的概念并进行实现。

前期的数据湖称为本地数据湖,装置在公司服务器上。这种类型的数据湖的首要优势是公司对体系的彻底操控。跟着云核算的出现,数据湖现已迁移到云端,将办理、保护和安全性问题留给云供给商及其客户,双方都担任其数据的安全性。这被称为云数据湖,而且其受欢迎度正在增长。供给云数据湖的首要渠道包括亚马逊云服务(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经过在作业机器的内存中履行查询来节省时刻,包括在那里对中心数据集履行操作,而不是将它们耐久保存到磁盘。

《Learning and Operating Presto 》第一章: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说明晰查询引擎处理联邦查询的根本过程。一旦接纳到查询,查询引擎会解析它(查询解析)并拜访源目录以选择触及查询的数据源或多个数据源(数据源选择)。因而,源选择将查询分解为子查询。

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

接下来的过程触及构建逻辑计划(查询优化),该计划界说了查询的履行方法以及应该运用哪些运算符(JOIN、UNION、FILTER等)。逻辑计划的一个示例是依据树的计划,其中树的叶子对应要履行的子查询,而内部节点表示运算符。

逻辑计划被转化为物理计划(查询履行),该计划在所选的数据源上实践履行查询。终究将单个子查询的输出进行和谐以构建终究成果(查询和谐)。

在云中运转

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

Presto架构和中心组件

图1-5展现了Presto的架构,布置为两个首要服务:一个单一的和谐器和许多作业节点。和谐器服务实践上是操作的中心,从客户端接纳查询请求,解析查询,构建履行计划,然后在许多作业节点之间调度要履行的任务。和谐器包括三个首要组件:解析器、计划器和调度器。

每个作业节点并行处理整个查询的一部分,您可以依据需求增加作业节点服务到Presto中。每个数据源都装备为一个目录,您可以在每个查询中查询尽或许多的目录。

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

您可以以三种不同的方法装备Presto:

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

表1-2概述了不同装备供给的优点。单一数据源仅供给快速剖析。装备为具有多个数据源的Presto,每个独立查询,供给快速的联邦剖析。最后,如果Presto装备为具有多个数据源,这些数据源相关并一同查询,它将供给快速、联邦和一致的剖析。

《Learning and Operating 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数据库界说了一个通用的电商场景,您可以用于测试意图,具有可变数量的数据。

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

  • 实时客户活动

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

  • 产品数据库

包括产品目录

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

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

总结

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