1. Presto 介绍
在本文中我们讨论下你可能已经遇到过的关于数据大规模增长的问题,以及数据被忽略的价值。Presto 是处理所有数据并通过结构化查询语言(SQL)提供行之有效工具的关键推动力。Presto 的设计和功能能够让你获得更好的见解,而不仅仅只是访问。你可以更快地获得这些见解,并获得过去由于成本过高、时间太长而无法获得的信息。除此之外,你可以使用更少的资源,花费更少的预算来学到更多。
2. 大数据的问题
每个人都在从设备指标,用户行为追踪,商业交易,地理位置信息,软件和系统测试过程等环节中获取越来越多的数据。对数据的理解和洞察可以获得新的见解,甚至可以成就或破坏任何一个计划或者一家企业。
同时,各种各样的存储系统也越来越多:关系型数据库、NoSQL数据库、文档型数据库、K-V型数据库、对象存储系统,等等。在当今的企业中,其中许多是必需使用的,不再只能仅仅使用其中一个。如下图所示,处理这些系统是一件艰巨任务:
另外,我们并不能够使用统一的标准工具来访问这些不同的系统。针对不同系统的各种查询语言和不同分析工具随处可见。同时,你的数据分析师可能只了解一门语言,那就是 SQL。众多强大的工具都依赖 SQL 进行分析,创建仪表板、丰富的报表以及其他商业智能工作。
数据分散在各处,其中有些对于数据的查询甚至不能满足分析师的要求。另外有一些系统,和现代的云架构不同,将数据存储在无法水平扩展的整体架构中。没有了这些能力,您将缩小潜在用例以及用户数量,从而缩小数据的实用性。
在全球范围内,事实证明,创建和维护大型专用数据仓库的传统方法非常昂贵。通常,对于许多用户和使用模式来说,这种方法也太慢且麻烦。您会看到一种系统会解锁这些巨大的价值。
3. 让 Presto 来解救
Presto 能够解决上面所有问题,并能够带来更多的能力:通过联邦查询查询不同的系统,并行查询,水平集群扩展等等。如下图所示是 Presto 的 logo。
Presto 是一个开源的分布式 SQL 查询引擎。它从零设计、编写,可针对各种不同大小(从千兆字节到PB大小)的数据源进行高效地查询。Presto 打破了使用昂贵的商业解决方案进行快速分析或者使用大量硬件的缓慢“免费”解决方案之间的错误认知。
3.1 为性能和扩展而设计
Presto 是一种通过使用分布式执行来查询大量数据的工具。如果要查询的数据量为 TB 甚至是 PB 级别,可能会使用如 Apache Hive 之类的工具,这些工具可与 Hadoop 及其 Hadoop 分布式文件系统(HDFS)交互。Presto 目的就是替代这些工具,从而更有效地查询数据。
那些期望 SQL 响应时间能达到实时分析的毫秒级别、秒级以及分钟级别的分析师可以选择 Presto。Presto 支持 SQL,通常用于数据仓库和分析中以分析数据,聚合大量数据并生成报告。这些工作通常被归类为在线分析处理(OLAP)。
即使 Presto 可以理解并有效执行 SQL,但 Presto 也不是数据库,因为它不包括自己的数据存储系统。它并不是要成为替代 Microsoft SQL Server,Oracle,MySQL 或 PostgreSQL 的通用关系数据库。此外,Presto 设计的目的不是进行在线交易处理(OLTP)。对于为数据仓库或分析而设计、优化的数据库,例如 Teradata,Netezza,Vertica 或者 Amazon Redshift 也是如此。
Presto 利用众所周知的技术和新颖的技术来进行分布式查询处理。这些技术包括:内存中并行处理,集群中跨节点的流水线执行,使所有 CPU 内核保持繁忙的多线程执行模型,有效的扁平化内存数据结构最大程度地减少 Java 垃圾回收以及 Java 字节码生成。
3.2 SQL-on-Anything
Presto 最初的目标是在 HDFS 中查询数据,这个目标完成的非常好。但是我们远不满足于此,相反,Presto 是一种查询引擎,可以查询对象存储,关系型数据库管理系统(RDBMS),NoSQL 数据库以及其他系统中的数据,如下图所示。
Presto 会查询数据所处的位置,并不需要将数据迁移到一个集中的位置。因此,Presto 允许查询 HDFS 以及其他分布式对象存储系统中的数据。它允许查询 RDBMS 以及其他数据源。这样,它可以真正查询任何位置的数据,因此可以取代传统、昂贵且繁重的提取,转换和加载(ETL)过程。因此,Presto 显然不仅仅是另一个 SQL-on-Hadoop 解决方案。
对象存储系统包括 Amazon Web Services(AWS)简单存储服务(S3),Microsoft Azure Blob 存储,Google Cloud Storage 和与 S3 兼容的存储,例如 MinIO 和 Ceph。Presto 可以查询传统的 RDBMS,例如 Microsoft SQL Server,PostgreSQL,MySQL,Oracle,Teradata 和 Amazon Redshift。Presto 还可以查询 NoSQL 系统,例如 Apache Cassandra,Apache Kafka,MongoDB 或 Elasticsearch。Presto 几乎可以查询任何内容,实际上是一个 SQL-on-Anything 系统。
对于用户而言,这意味着突然之间,他们不再需要依赖特定的查询语言或工具来与这些特定系统中的数据进行交互。他们可以简单地利用 Presto 以及现有的 SQL 技能,易于理解的分析,仪表板和报表工具。这些工具都建立在使用 SQL 的基础之上。用户甚至可以使用 Presto 通过他们知道的 SQL 在不同的系统上进行查询。
3.3 计算存储分离
Presto 是不带存储功能的数据库,它只是查询数据所处的位置。使用 Presto 时,存储和计算是分离的,可以独立扩展。Presto 代表计算层,而底层数据源代表存储层。
这样,Presto 可以根据对访问数据的分析需求来扩展和缩减其计算资源以进行查询处理。无需移动数据,无需为当前查询的确切需求配置计算和存储资源,也无需根据不断变化的查询需求定期进行更改。
Presto 可以通过动态扩展计算集群来扩展查询能力,并且可以直接查询数据在数据源中的位置。此特性可以极大地优化硬件资源需求,从而降低成本。
4. Presto 使用场景
Presto 的灵活性和强大功能让户可以自己决定使用 Presto 的程度。对于一个特定的问题,只能从一个小的用途开始。大多数 Presto 用户都是这样开始的。一旦用户和企业习惯了这些优点和功能,就会发现新的思路。很快您就会发现 Presto 可以访问各种数据源,可以满足无数的需求。
4.1 SQL 分析场景
RDBMS 和 SQL 的使用已经存在了很长时间,并且证明非常有用。没有他们,任何企业都无法运作。实际上,大多数企业都在运行多个系统。大型商业数据库,例如 Oracle 数据库或 IBM DB2。像 MariaDB 或 PostgreSQL 这样的开源系统也可能用于某些解决方案和一些内部应用程序。
作为消费者和分析师,您可能会遇到许多问题:
- 有时甚至不知道在哪里可以找到数据,只有企业的多年工作经验可以帮助您找到正确的数据。
- 查询不同数据源数据库需要使用不同的连接,以及运行不同的 SQL 方言。它们比较类似,但是却可以引起混乱以及需要学习各种细节。
- 如果不使用数据仓库,则无法在查询中合并来自不同系统的数据。
Presto 可以帮你解决以上所有问题。你可以在 Presto 中访问所有数据库。你可以使用 Presto 支持的标准 SQL、函数、各种操作符查询不同系统。
4.2 数据仓库和源系统场景
当企业发现需要更好地理解和分析 RDBMS 其众多的数据时,数据仓库系统的创建和维护便开始发挥作用。然后,从各种系统中选择数据将经历复杂的 ETL 流程,并且通常通过长时间运行的批处理作业,最终将其存储在受到严格控制的大型数据仓库中。
尽管给您提供了很大帮助,但作为数据分析师,您现在遇到了新问题:
- 现在,除了所有数据库本身之外,您多了一个入口用于您的工具和查询。
- 今天需要的数据并不在数据仓库中,添加数据是一个痛苦而昂贵的过程,充满了障碍。
Presto 允许您像添加任何其他关系数据库一样将任何数据仓库数据库添加为数据源。
4.3 SQL 访问一切的特性
只使用 RDBMS 的日子已经一去不复返了。现在,数据存储在针对相关用例进行特定优化的许多不同系统中。基于对象的存储,K-V 存储,文档数据库,图形数据库,事件流系统以及其他所谓的 NoSQL 系统都具有不同的功能和优势。在您的企业中至少会使用一些系统,这些系统中的数据对于理解和改善您的业务至关重要。当然,所有这些系统还要求您使用不同的工具和技术来查询和使用数据。至少,这是一项具有巨大学习成本的复杂任务。
另一方面,Presto 允许您将所有这些系统作为数据源连接。使用标准 ANSI SQL 以及使用 SQL 的这些工具都可以通过它进行查询,如下图所示。
有了 Presto,理解不同系统的数据第一次变得容易了。
4.4 联邦查询
暴露 Presto 中的所有数据孤岛是了解数据的一大步。您可以使用 SQL 和标准工具来查询它们。但是,通常解决问题需要您进入数据孤岛,了解各个方面,然后以本地方式组合它们。
Presto 允许您使用联合查询来做到这一点。联合查询是一种 SQL 查询,可以在同一条语句中引用和使用完全不同的系统中的不同数据库和 schemas。您可以同时查询 Presto 中的所有数据源,并且在同一查询中使用相同的 SQL。
将联合查询与 Presto 结合使用可以使您获得原本无法了解的信息。
4.5 虚拟的数据仓库语义层
数据仓库系统在给用户带来巨大收益的同时,也给企业带来了负担:
- 运行和维护数据仓库代价非常昂贵
- 需要专门的团队运行和管理数据仓库以及相关的 ETL 处理
- 将数据放入仓库需要用户打破繁文缛节,通常会花费太多时间
另一方面,Presto 可用作虚拟数据仓库。可以使用一种工具和标准 SQL 来定义您的语义层。在 Presto 中将所有数据库配置为数据源后,就可以查询它们。Presto 提供了基础的计算能力来查询数据库中存储。使用 SQL 以及支持的函数和运算符,Presto 可以直接从数据源提供所需的数据。这样在数据分析之前,我们无需拷贝,移动或转换数据。
借助对所有连接的数据源的标准 SQL 支持,您可以创建所需的语义层,以更简单的方式从工具和最终用户层进行查询。并且该层包含所有基础数据源,无需迁移任何数据。 Presto 可以在数据源和存储层查询数据。
使用 Presto 作为这种’动态数据仓库’,企业可以利用附加功能来增强其现有数据仓库,甚至完全避免建立和维护数据仓库。
4.6 数据湖查询引擎
术语“数据湖”通常用于大型 HDFS 或类似的分布式对象存储系统,将各种数据转储到其中,而无需考虑如何访问它。Presto 将其解锁,成为有用的数据仓库。实际上,Presto 诞生于 Facebook,比 Hive 和其他工具能提供的更快、更强大的 Hadoop 数据仓库查询能力。
现在,数据湖经常使用云服务商或其他开源项目提供的 HDFS 以外的其他对象存储系统。Presto 能够对它们中的任何一个使用 Hive 连接器,因此可以在您的数据湖上(无论如何存储数据以及存储在哪)进行基于 SQL 的分析。
4.7 SQL转换和ETL
借助对 RDBMS 和其他数据存储系统的支持,Presto 可用于移动数据。SQL 以及丰富的 SQL 函数集可以让你查询数据,并对其进行转换,然后将其写入同一数据源或任何其他数据源。
实际上,这意味着您可以将数据从对象存储系统或键值存储中拷贝到 RDBMS 中,并将其用于以后的分析。当然,您也可以进行转换和汇总数据以获得新的信息。
另一方面,从操作的 RDBMS 或事件流系统(如 Kafka)中获取数据并将其移入数据湖以减轻 RDBMS 中的查询负担也是很常见的。ETL流程(现在通常也称为数据准备)可以成为该流程中重要的部分,以改善数据并创建更适合查询和分析的数据模型。
在这种情况下,Presto 是整个数据管理解决方案的关键部分。
4.8 更快的响应带来更好的认知
提出复杂的问题并使用海量数据集总是会遇到限制。拷贝数据并将其加载到数据仓库中进行分析代价太昂贵了。这些需要很多的计算能力才能完全运行它们,否则需要花很多天才能得到答案。
Presto 在设计中规避了数据拷贝。并行处理以及很多的优化工作都会改善 Presto 的分析性能。如果过去需要三天才能查的出来,现在可以在 15 分钟内运行。可以更快的得到结果,并具有运行更多查询的能力。
Presto 的更快的处理可实现更好的分析和结果。
4.9 大数据,机器学习和人工智能
Presto 向支持 SQL 的平台提供越来越多的数据,并将查询扩展到海量数据集,使其成为处理大数据的主要工具。现在,这通常包括统计分析、机器学习和人工智能系统。借助对 R 和其他工具的支持,Presto 在这些用例中无疑可以发挥作用。
欢迎关注我的公众号和博客:
原文:Presto: The Definitive Guide