概述
Presto是一个分布式SQL查询引擎,它被设计专门用于进行高速、实时的数据分析。它支持标准的ANSI SQL,包括复杂查询、聚合(Aggregation)、连接(Join)和窗口函数(Window function)。
Presto的运行模型和Hive或MapReduce有着本质的区别。Hive将查询翻译成多阶段的MapReduce任务,一个接着一个运行,每一个任务从磁盘读取输入数据并且将中间结果输出到磁盘上。然而,Presto引擎没有使用MapReduce,它使用了一个定制的查询和执行引擎及响应的操作符来支持SQL语法。除了改进的调度算法之外,所有的数据处理都是在内存中进行的。通过软件的优化,形成处理的流水线,以避免不必要的磁盘读写和额外的延迟。这种流水线式的执行模型会在同一时间运行多个数据处理段,一旦数据可用就会将数据从一个处理段传入下一个处理段。这样的方式会大大减少各种查询的端到端响应时间。
相比Druid,Presto主要是解决SQL查询引擎的问题,将SQL查询转换成分布式任务,快速到数据存储区获得必要的数据,并且返回结果。它并不直接去优化存储结构,而是直接访问HDFS或者其他数据存储层。
架构
在上面的架构图中可以看出,Coordinator负责与客户端交互,发现Worker节点并协调相应的查询任务。
节点类型
1. Coordinator
2. Worker
Presto通过Coordinator(协调节点)和Worker(工人节点),完成查询任务。Coordinator接收客户端的查询请求,并把查询任务分解到Worker节点完成查询工作,最后汇总结果返回给客户端。
注意
Presto查询的数据源不在Presto本身的整体架构内,只需要合适的Connector,Presto既可以把传统的关系型数据库作为数据源,也可以把Hadoop和HDFS作为数据源。