相关中文推荐
Presto DB 简介
产生背景数据量急速增长到了 PB 量级,查询有这么大数据量的数据库出现问题,我们需要运行更多的交互式查询并快速获得结果。虽然 HDFS 支持大数据存储,但是不能通过面板或者 BI 工具直观展现,因为 HIVE 太慢或者 ODBC 还不可用。
简介Presto 是由facebook开发的一个分布式SQL查询引擎, 它被设计为用来专门进行高速、实时的数据分析。它支持标准的ANSI SQL,包括复杂查询、聚合(aggregation)、连接(join)和窗口函数(window functions)。它采用 Java 实现。它的数据源包括 HIVE、HBase、关系数据库,甚至专有数据存储。
历史2012 年秋天 Facebook 启动 Presto 项目,目的包括交互式查询、加速商业数据仓库以及扩展 Facebook 处理数据的规模。2013 年春季在整个 Facebook 使用。2013 年冬天在 Github 上开源。在最初的 6 个月有 30 多个 contributor,其中还有 Facebook 外部开发者。到现在有 99 个 contributor,包括 129 个Release,6000+ commits。
架构HDFS 一般数据分析框架:
Facebook 希望做成这样:
然后再扩充数据源:
Presto分布式框架:
下面的架构图中展现了简化的Presto系统架构。客户端(client)将SQL查询发送到Presto的协调员(coordinator)。协调员会进行语法检查、分析和规划查询计划。计划员(scheduler)将执行的管道组合在一起,将任务分配给那些里数据最近的节点,然后监控执行过程。客户端从输出段中将数据取出,这些数据是从更底层的处理段中依次取出的。
Presto 的运行模型和 Hive 或 MapReduce 有着本质的区别。Hive 将查询翻译成多阶段的 MapReduce 任务,一个接着一个地运行。每一个任务从磁盘上读取输入数据并且将中间结果输出到磁盘上。然而Presto引擎没有使用MapReduce。为支持 SQL 语法,它实现了一个定制的查询、执行引擎和操作符。除了改进的调度算法之外,所有的数据处理都是在内存中进行的。不同的处理端通过网络组成处理的流水线。这样会避免不必要的磁盘读写和额外的延迟。这种流水线式的执行模型会在同一时间运行多个数据处理段,一旦数据可用的时候就会将数据从一个处理段传入到下一个处理段。这样的方式会大大的减少各种查询的端到端延迟。
Presto 动态编译部分查询计划为字节码,使得 JVM 能够优化并生成本地机器码。 在扩展性方面,Presto 只设计了一种简单的存储抽象,使得能够在多种数据源上进行 SQL 查询。连接器只需要提供获取元数据的接口,获得数据地址后自动访问数据。 至于缺点方面,Presto 对表的连接以及 group by操作有比较严格的大小限制,这可能是因为所有数据处理都是在内存中完成。另外 Presto 查询的结果只会返回到客户端,还不支持写回到表。
更多:http://www.stay-stupid.com/?p=395
|