Presto是一个分布式的SQL查询引擎,由Facebook在2012年开发并开源,它可以查询来自多个数据源的大数据集合,并且可以获得像使用单一关系型数据库一样的性能表现。
Presto处理大数据非常快,因为它使用了一个分布式架构,这意味着查询可以分布在多个节点上平行运行,从而提高了查询速度。Presto支持标准SQL查询,同时支持 ANSI SQL 标准和大多数现代SQL查询语言,使它非常适合用户进行数据分析。
Presto可以处理各种数据源,包括Hadoop分布式文件系统(HDFS),Apache Cassandra,Apache HBase等。同时它还提供了许多工具和插件,使得用户可以在流行的分布式数据处理框架(例如 Hadoop 和 Apache Spark)上轻松地安装和运行 Presto。
Presto 采用了基于内存的分布式查询架构,它由一组协同工作的进程构成,包括遍历器(Coordinator)和工作者(Worker)。协调器节点负责将客户端查询转换成任务,分配给工作者节点执行,然后将结果组合成最终结果。工作者节点负责执行任务并将结果返回协调器节点。
Presto 不存储数据,它直接查询存储在各种数据源中的数据。Presto 支持多种数据源,包括 Hadoop 分布式文件系统、关系型数据库、NoSQL 数据库、云存储和数据仓库等。
当客户端发送查询请求时,协调器节点会解析查询,生成查询计划,并将计划分配给工作者节点。工作者节点并行执行查询,并将结果返回给协调器节点。协调器节点将所有工作者节点返回的结果组合到一起,并将最终结果返回给客户端。
Presto 的关键特性是查询的优化。在查询之前,Presto 会进行优化以生成最优的执行计划。Presto 使用成本估算器和统计信息收集器收集查询统计信息,并使用该信息来生成最佳查询计划。使用 Presto 构建高性能查询的关键是在查询之前对统计信息进行准确收集和数据分区。
Presto可以支持MySQL、PostgreSQL、cassandra、Hive、Kafka等多种数据源查询。
Presto支持部分标准SQL对数据进行查询,并提供SQL shell进行SQL查询。但是Presto不支持存储过程,不适合大表Join操作,因为Presto是基于内存的,多张大表关联可能给内存带来压力。
Presto有很好的扩展向,可以自定义开发特定数据源的Connector,使用SQL分析指定Connector中的数据。
在Presto中可以根据业务需要使用特定类型的Connector来读取不同数据源的数据,进行join关联计算。
Presto是基于内存计算的,减少磁盘IO,计算更快。Presto性能是Hive的10倍以上。Presto能够处理PB级别的数据,但Presto并不是把PB级别的数据一次性加载到内存中计算,而是根据处理方式,例如:聚合场景,边读取数据,聚合,再清空内存,再去读取数据加载内存,再聚合计算,再清空内存... 这种方式。如果使用Join查询,那么就会产生大量的中间数据,速度会变慢。
由于Presto是基于PipeLine进行设计的,因此在进行海量数据处理过程中,终端用户不用等到所有的数据都处理完成才能看到结果,而是可以向自来水管一样,一旦计算开始,就可以产生一部分结果数据,并且结果数据会一部分接一部分的返回到客户端。
Presto 可以轻松地查询存储在数据湖中的数据,包括 Hadoop 分布式文件系统、Apache Cassandra、Apache HBase 等数据源。
Presto 可以随时查询和分析数据,并支持复杂的查询操作,适合数据科学家进行分析和探索性数据分析。
Presto 可以轻松地处理高吞吐量和低延迟数据查询,这使得它非常适合企业应用程序。
Presto 的多租户性质可以在一个集群中处理多个用户和应用程序的查询,从而提高查询效率和性能,并减少硬件成本。