Presto是一个开源的分布式SQL查询引擎,支持从GB到PB数据量上的交互式分析查询。数据库
Presto的设计和编写彻底是为了解决像Facebook这样规模的商业数据仓库的交互式分析和处理速度的问题。架构
Presto支持在线数据查询,包括Hive, Cassandra, 关系数据库以及专有数据存储。 一条Presto查询能够将多个数据源的数据进行合并,能够跨越整个组织进行分析。分布式
Presto以分析师的需求做为目标,他们指望响应时间小于1秒到几分钟。 Presto终结了数据分析的两难选择,要么使用速度快的昂贵的商业方案,要么使用消耗大量硬件的慢速的“免费”方案。spa
Facebook使用Presto进行交互式查询,用于多个内部数据存储,包括300PB的数据仓库。 天天有1000多名Facebook员工使用Presto,执行查询次数超过30000次,扫描数据总量超过1PB。设计
Presto被设计用来主要处理数据仓储与分析:数据缝隙,聚合大量的数据而且生产报告。rest
这样的工做一般被归类为Online Analytical Processing(OLAP)。数据分析
Presto查询引擎是一个Master-Slave的架构,由一个Coordinator节点(Discovery Server),多个Worker节点组成,Discovery Server一般内嵌于Coordinator节点中。ast
Coordinator负责解析SQL语句,生成执行计划,分发执行任务给Worker节点执行。Worker节点负责实际执行查询任务。配置
Worker节点启动后向Discovery Server服务注册,Coordinator从Discovery Server得到能够正常工做的Worker节点。硬件
若是配置了Hive Connector,须要配置一个Hive MetaStore服务为Presto提供Hive元信息,Worker节点与HDFS交互读取数据。
Presto中访问多个数据源时,增长了一层catalog来映射不一样数据源,经过配置不一样的connector来链接多种类型的数据源,或者同种类型的多个数据源。
Presto并不存储任何实际数据与元数据,只是提供了计算引擎。模型定义以及实际数据仍存储在各数据源中,Presto只是提供了一个通用的数据源链接。