E-MapReduce产品的最新版本2.0.0现在支持Presto了,使用指南。本文主要介绍一下什么是Preosto。
Presto是一个分布式SQL查询引擎, 它被设计用来进行高速、实时的数据分析。它支持标准的ANSI SQL,包括复杂查询、聚合(aggregation)、连接(join)和窗口函数(window functions)。下图中展现了简化的Presto系统架构。客户端(client)将SQL查询发送到Presto的控制器 (coordinator)。控制器会进行语法检查、分析和规划查询计划。调度(scheduler)将执行的管道组合在一起, 将任务分配给那些离数据最近的节点(一般都是有数据的节点),然后监控执行过程。 客户端从输出端中将数据取出,这些数据是从更底层的处理端中依次取出的。
Presto的运行模型和Hive或MapReduce有着本质的区别。Hive将查询翻译成多阶段的MapReduce任务,一个接着一个地运行。每一个任务从磁盘上读取输入数据并且将中间结果保存到磁盘上。Presto引擎没有使用MapReduce,它使用了一个定制的查询和执行引擎,以及相应的操作符来支持SQL的语法。除了读取数据之外,所有的数据处理都是在内存中进行的。不同的处理端通过网络组成处理的流水线, 这样会避免不必要的磁盘读写和延迟。这种流水线式的执行模型会在同一时间运行多个数据处理,一旦数据可用的时候就会将数据从一个处理器传入到下一 个处理器。这样的方式会大大的减少各种查询的端到端响应时间。
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 官网: http://prestodb.io/
- Presto Github 主页: https://github.com/facebook/presto
- Presto 文档: http://prestodb-china.com/docs/current/