跳至主要内容

什么是 Presto(PrestoDB)?

什么是 Presto 或 PrestoDB?

Presto(或 PrestoDB)是一种开源的分布式 SQL 查询引擎,从头开始设计用于针对任何规模的数据进行快速分析查询。它既支持非关系源,例如Hadoop分布式文件系统(HDFS)、亚马逊S3 、Cassandra、MongoDB和 HBase,也支持关系数据源,例如MySQL、PostgreSQL、Amazon Redshift、微软 SQL 服务器和Teradata。

Presto 可在数据的存储位置查询数据,无需将数据移动到独立的分析系统。查询执行可在纯粹基于内存的架构上平行运行,大多数结果在几秒内即可返回。您将会发现,它已被许多知名公司采用,例如 FacebookAirbnbNetflixAtlassianNasdaq

Presto 的发展历史

Presto 最初作为 Facebook 的项目启动,针对 300PB 的数据仓库运行交互式分析查询,使用大型基于 Hadoop/HDFS 的集群构建。在构建 Presto 之前,Facebook 使用的是 2008 年创建并推出的 Apache Hive,为 Hadoop 生态系统带来熟悉的 SQL 语法。Hive 在将复杂的 Java MapReduce 作业简化成类似 SQL 的查询方面对 Hadoop 生态系统有着重大影响,同时还能够执行大规模的任务。但是,它未针对交互式查询所需的高速性能进行优化。

在 2012 年,Facebook 数据基础设施组构建了 Presto,这种交互式查询系统能够以 PB 级规模快速运行。它于 2013 年春季在全公司范围内推广。2013 年 11 月,Facebook 将 Presto 作为 Apache 软件许可证下的开源软件,任何人都可以从 Github 上下载。今天,Presto 已成为在 Hadoop 上进行交互式查询的流行选择,获得了来自 Facebook 和其他组织的大量贡献。Facebook 的 Presto 实施的使用者超过一千名员工,他们每天运行超过 30000 次查询,处理的数据达到 1PB。

Presto 工作原理

Presto 是在 Hadoop 上运行的分布式系统,使用与经典大规模并行处理 (MPP) 数据库管理系统相似的架构。它有一个协调器节点,与多个工作线程节点同步工作。用户将其 SQL 查询提交给协调器,由其使用自定义查询和执行引擎进行解析、计划并将分布式查询计划安排到工作线程节点之间。它设计用于支持标准 ANSI SQL 语义,包括复杂查询、聚合、联接、左/右外联接、子查询、开窗函数、不重复计数和近似百分位数。

查询编译之后,Presto 将请求处理到工作线程节点之间的多个阶段中。所有处理都在内存中进行,并以流水线方式经过网络中的不同阶段,从而避免不必要的 I/O 开销。添加更多工作线程节点可提高并行能力,并加快处理速度。

为了使 Presto 可扩展到任何数据源,它的设计采用了存储抽象化,以便于轻松地构建可插入的连接器。因此,Presto有很多连接器,包括连接Hadoop分布式文件系统(HDFS)、亚马逊S3、Cassandra、MongoDB和HBase等非关系源,以及MySQL、PostgreSQL、亚马逊 Redshift、微软SQL Server和Teradat a 等关系源。数据在其存储位置接受查询,无需将其移动到独立的分析系统中。 

Presto 和 Hadoop 之间有什么区别?

Presto 是一种开源分布式 SQL 查询引擎,设计用于对 HDFS 和其他源中的数据进行快速交互式查询。与 Hadoop/HDFS 不同,它没有自己的存储系统。因此,Presto 与 Hadoop 互补,有些机构同时使用这两种产品来解决更广泛的业务挑战。Presto 可以与 Hadoop 的任何实施一起安装,并封装在 Amazon EMR Hadoop 分发中。

什么人使用 Presto?

在很多知名组织,Presto 以非常大的规模用于其生产中。您将会发现其中包括 FacebookAirbnbNetflixAtlassianNasdaq 以及更多。Facebook 的 Presto 实施的使用者超过一千名员工,他们每天运行超过 30000 次查询,处理的数据达到 1PB。Netflix 平均每天在其 Presto 集群中运行约 3500 条查询。爱彼迎开发并开源了 Airpal,这是一款基于网络的查询执行工具,可在Presto之上运行。在其论坛以及 Facebook 的 Presto 页面上还有更大的 Presto 社区。

如何在云端部署 Presto?

Presto 是理想的云端工作负载,因为在云中能够实现性能、可扩展性、可靠性、可用性以及大型规模经济。只需几分钟即可启动 Presto 集群。您不必担心节点预置、集群设置、Presto 配置或集群优化。

AWS 如何在云端构建您的 Presto 实现?

亚马逊 EMR 亚马逊 Athena 是在云端部署 Presto 的最佳场所,因为它可以为您完成 Presto 的集成和严格的测试,同时具有与 AWS 一样的规模、简单性和成本效益。使用 Amazon EMR,您可以在几分钟内启动 Presto 集群,而无需执行节点预置、集群设置、Presto 配置或集群优化。EMR 让您可以在短短几分钟内预置一个、上百个或成千上万个计算实例。通过 Amazon Athena,您可使用 AWS 无服务器平台部署 Presto,没有服务器、虚拟机或集群需要设置、管理或调优。只需指向您在 Amazon S3 上的数据,定义架构,并使用内置查询编辑器或使用现有的商业智能 (BI) 工具启动查询。Athena 自动并行执行您的查询,并动态地扩展资源以使查询快速运行。您只需为实际运行的查询付费。