Presto,来自Facebook的开源分布式查询引擎

E-MapReduce产品的最新版本2.0.0现在支持Presto了,使用指南。本文主要介绍一下什么是Preosto。


Presto是一个分布式SQL查询引擎, 它被设计用来进行高速、实时的数据分析。它支持标准的ANSI SQL,包括复杂查询、聚合(aggregation)、连接(join)和窗口函数(window functions)。下图中展现了简化的Presto系统架构。客户端(client)将SQL查询发送到Presto的控制器 (coordinator)。控制器会进行语法检查、分析和规划查询计划。调度(scheduler)将执行的管道组合在一起, 将任务分配给那些离数据最近的节点(一般都是有数据的节点),然后监控执行过程。 客户端从输出端中将数据取出,这些数据是从更底层的处理端中依次取出的。


Presto,来自Facebook的开源分布式查询引擎


Presto的运行模型和Hive或MapReduce有着本质的区别。Hive将查询翻译成多阶段的MapReduce任务,一个接着一个地运行。每一个任务从磁盘上读取输入数据并且将中间结果保存到磁盘上。Presto引擎没有使用MapReduce,它使用了一个定制的查询和执行引擎,以及相应的操作符来支持SQL的语法。除了读取数据之外,所有的数据处理都是在内存中进行的。不同的处理端通过网络组成处理的流水线, 这样会避免不必要的磁盘读写和延迟。这种流水线式的执行模型会在同一时间运行多个数据处理,一旦数据可用的时候就会将数据从一个处理器传入到下一 个处理器。这样的方式会大大的减少各种查询的端到端响应时间。


Presto,来自Facebook的开源分布式查询引擎


Presto查询引擎是一个Master-Slave的架构,由一个Coordinator节点,一个Discovery Server节点,多个Worker节点组成,Discovery Server通常内嵌于Coordinator节点中。Coordinator负责解析SQL语句,生成执行计划,分发执行任务给Worker节点执行。 Worker节点负责实际执行查询任务。Worker节点启动后向Discovery Server服务注册,Coordinator从Discovery Server获得可以正常工作的Worker节点。如果配置了Hive Connector,需要配置一个Hive MetaStore服务为Presto提供Hive元信息,根据元信息Worker节点与HDFS交互读取数据。


Presto特点:

  • 完全基于内存的并行计算
  • 流水线
  • 本地化计算
  • 动态编译执行计划
  • 使用内存和数据结构
  • 类BlinkDB的近似查询
  • GC控制


参考资料


上一篇:用引导操作打通presto访问oss数据


下一篇:自建hadoop集群迁移到EMR之数据迁移篇