分享

Presto 相关文章汇总

本帖最后由 yuwenge 于 2018-5-20 19:56 编辑

Presto因为速度,被很多企业所使用,下面是prosto的相关知识。


原文链接:
https://prestodb.io/docs/current/

本帖被以下淘专辑推荐:

已有(3)人评论

跳转到指定楼层
yuwenge 发表于 2018-5-20 19:53:04
相关中文推荐

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 一般数据分析框架:
image001.jpg

Facebook 希望做成这样:

image002.jpg

然后再扩充数据源:

image003.jpg

Presto分布式框架:

image004.jpg

下面的架构图中展现了简化的Presto系统架构。客户端(client)将SQL查询发送到Presto的协调员(coordinator)。协调员会进行语法检查、分析和规划查询计划。计划员(scheduler)将执行的管道组合在一起,将任务分配给那些里数据最近的节点,然后监控执行过程。客户端从输出段中将数据取出,这些数据是从更底层的处理段中依次取出的。

image005.jpg

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

Presto 动态编译部分查询计划为字节码,使得 JVM 能够优化并生成本地机器码。
在扩展性方面,Presto 只设计了一种简单的存储抽象,使得能够在多种数据源上进行 SQL 查询。连接器只需要提供获取元数据的接口,获得数据地址后自动访问数据。
至于缺点方面,Presto 对表的连接以及 group by操作有比较严格的大小限制,这可能是因为所有数据处理都是在内存中完成。另外 Presto 查询的结果只会返回到客户端,还不支持写回到表。

更多:http://www.stay-stupid.com/?p=395



回复

使用道具 举报

yuwenge 发表于 2018-5-20 19:55:57
Presto实现原理和美团的使用实践

Facebook的数据仓库存储在少量大型Hadoop/HDFS集群。Hive是Facebook在几年前专为Hadoop打造的一款数据仓库工具。在以前,Facebook的科学家和分析师一直依靠Hive来做数据分析。但Hive使用MapReduce作为底层计算框架,是专为批处理设计的。但随着数据越来越多,使用Hive进行一个简单的数据查询可能要花费几分到几小时,显然不能满足交互式查询的需求。Facebook也调研了其他比Hive更快的工具,但它们要么在功能有所限制要么就太简单,以至于无法操作Facebook庞大的数据仓库。
2012年开始试用的一些外部项目都不合适,他们决定自己开发,这就是Presto。2012年秋季开始开发,目前该项目已经在超过 1000名Facebook雇员中使用,运行超过30000个查询,每日数据在1PB级别。Facebook称Presto的性能比Hive要好上10倍多。2013年Facebook正式宣布开源Presto。
本文首先介绍Presto从用户提交SQL到执行的这一个过程,然后尝试对Presto实现实时查询的原理进行分析和总结,最后介绍Presto在美团的使用情况。
Presto架构
image1.png
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执行查询过程简介
既然Presto是一个交互式的查询引擎,我们最关心的就是Presto实现低延时查询的原理,我认为主要是下面几个关键点,当然还有一些传统的SQL优化原理,这里不介绍了。
  • 完全基于内存的并行计算
  • 流水线
  • 本地化计算
  • 动态编译执行计划
  • 小心使用内存和数据结构
  • 类BlinkDB的近似查询
  • GC控制
为了介绍上述几个要点,这里先介绍一下Presto执行查询的过程

更多参考
https://tech.meituan.com/presto.html

回复

使用道具 举报

恋枫缩影 发表于 2018-5-21 00:05:58
学习了,希望能提高hive的查询或者转换性能!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条