Hive查询流程分析

各个组件的作用

UI(user interface)(用户接口):提交数据操作的窗口
Driver(引擎):负责接收数据操作,实现了会话句柄,并提供基于JDBC / ODBC的execute和fetch API
Metastore(元数据):Hive元数据,存储所有表信息以及相关的HDFS文件存储目录,一般采用MySQL或者derby存储
Compiler(编译器):解析查询的SQL,生成阶段性的执行计划(包含MapReduce、元数据操作)
Execution Engine(执行引擎):执行compiler生成的执行计划。该执行计划是一个阶段的DAG

查询流程

Step 1:UI调用的Driver的execute接口

Step 2:Driver为查询创建会话句柄,并将查询发送给compiler以生成执行计划,

Step 3,4:compiler从metastore获取相关的元数据

Step 5:检查元数据,基于查询谓词调整分区,解析SQL,生成执行计划

Step 6,6.1,6.2,6.3:由compiler生成的执行计划是阶段的DAG,每个阶段都会涉及到Map/Reduce job,元数据的操作或者HDFS文件的操作。
在Map/Reduce阶段,执行计划包含Map操作树(操作树在Mappers上执行)和reduce操作树(Reduce 操作树在 Reducers上执行),
Execution Engine 将各个阶段提交个适当的组件执行。
Step 7, 8 and 9:在每个任务(mapper / reducer)中,表或者中间输出相关的反序列化器从HDFS读取行,并通过相关的操作树进行传递。
一旦这些输出产生,将通过序列化器生成零时的的HDFS文件(这个只发生在只有Map没有reduce的情况),生成的HDFS零时文件用于执行计划后续的Map/Reduce阶段。
对于DML操作,临时文件最终移动到表的位置。该方案确保不出现脏数据读取(文件重命名是HDFS中的原子操作),
对于查询,临时文件的内容由Execution Engine直接从HDFS读取,作为从Driver Fetch API的一部分

Presto查询流程分析

在Map/Reduce阶段 执⾏计划包含Map操作树 操作树在Mappers上执⾏ 和reduce

各个组件的作用

Client(客户端):提交数据操作的窗口

Discovery Server(服务发现者):存储可用的Server列表
Coordinator(协调者): 接收数据操作,解析SQL语句,生成查询计划,分发任务至Worker机
Connector Plugin(连接插件):连接Storagr,提供元数据,支持Hive、Kafka、MySQL、MonogoDB、Redis、JMX等数据源,可自定义
Worker(执行者):执行查询计划

查询流程

1、Client使用HTTP协议发送一个query请求
2、通过Discovery Server发现可用的Server
3、Coordinator构建查询计划(通过Anltr3解析为AST(抽象语法树),然后通过Connector获取原始数据的Metadata信息,生成分发计划和执行计划)
4、Coordinator向workers发送任务
5、Worker通过Connector插件读取数据
6、Worker在内存里执行任务(Worker是纯内存型计算引擎)
7、Worker将数据返回给Coordinator,汇总之后再响应客户端

Presto与Hive对比

区别:
MapReduce每个操作都需要写磁盘,每个stage需要等待前一个stage全部完成才开始执行,
而Presto将SQL转换为stage,每个stage又由多个tasks执行,每个tasks又将分为多个split。
所有的task是并行的方式执行,stage之间数据是以pipeline形式流式的执行,
数据之间的传输也是通过网络以Memory-to-Memory的形式进行,没有磁盘io操作。
这也是Presto性能比Hive快5-10倍的决定性原因

Presto缺点

1、没有容错能力,当一个query分发到多个Worker去执行时,当有一个Worker因为各种原因查询失败,Master感知到之后,整个query也会失败

2、内存限制,由于Presto是纯内存计算,所以当内存不够时,Presto并不会将结果dump到磁盘上,所以查询也就失败了(据说最新版本的Presto已经支持写盘操作)

3、并行查询,因为所有的task都是并行执行,如果其中一台Worker因为各种原因查询很慢,那么整个query就会变得很慢

4、并发限制,因为全内存操作+内存限制,能同时处理的数据量有限,因而导致并发能力不足

Mob项目的应用
http://gitlab.code.mob.com/mobdata-plat/dbcloud-api

作者:MobService
链接:https://juejin.im/post/5d103fb76fb9a07eb15d6145
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Presto查询引擎简单分析的更多相关文章

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

    Presto是一个分布式SQL查询引擎, 它被设计为用来专门进行高速.实时的数据分析.它支持标准的ANSI SQL,包括复杂查询.聚合(aggregation).连接(join)和窗口函数(windo ...

  2. 探究Presto SQL引擎(3)-代码生成

    ​ vivo 互联网服务器团队- Shuai Guangying 探究Presto SQL引擎 系列:第1篇<探究Presto SQL引擎(1)-巧用Antlr>介绍了Antlr的基本用法 ...

  3. 大数据系列之分布式大数据查询引擎Presto

    关于presto部署及详细介绍请参考官方链接 http://prestodb-china.com PRESTO是什么? Presto是一个开源的分布式SQL查询引擎,适用于交互式分析查询,数据量支持G ...

  4. 实时查询引擎 - Facebook Presto 介绍与应用

    1. Presto 是什么   Facebook presto是什么,继Facebook创建了HIVE神器后的又一以SQL语言作为接口的分布式实时查询引擎,可以对PB级的数据进行快速的交互式查询.它支 ...

  5. Presto: 可以处理PB级别数据的分布式SQL查询引擎

    2012年秋季Facebook启动了Presto,Presto的目的是在几百PB级别数据量上面进行准实时分析.在摒弃了一些外部项目以后,Facebook准备开发他们自己的分布式查询引擎.Presto的 ...

  6. Facebook 正式开源其大数据查询引擎 Presto

    Facebook 正式宣布开源 Presto —— 数据查询引擎,可对250PB以上的数据进行快速地交互式分析.该项目始于 2012 年秋季开始开发,目前该项目已经在超过 1000 名 Faceboo ...

  7. 探究Presto SQL引擎(1)-巧用Antlr

    一.背景 自2014年大数据首次写入政府工作报告,大数据已经发展7年.大数据的类型也从交易数据延伸到交互数据与传感数据.数据规模也到达了PB级别. 大数据的规模大到对数据的获取.存储.管理.分析超出了 ...

  8. 探究Presto SQL引擎(4)-统计计数

    作者:vivo互联网用户运营开发团队 -  Shuai Guangying 本篇文章介绍了统计计数的基本原理以及Presto的实现思路,精确统计和近似统计的细节及各种优缺点,并给出了统计计数在具体业务 ...

  9. HBase高性能复杂条件查询引擎

    转自:http://blog.csdn.net/bluishglc/article/details/31799255 mark 写在前面 本文2014年7月份发表于InfoQ,HBase的PMC成员T ...

随机推荐

  1. Python语言程序设计之二--用turtle库画围棋棋盘和正、余弦函数图形

    这篇笔记依然是在做<Python语言程序设计>第5章循环的习题.其中有两类问题需要记录下来. 第一是如何画围棋棋盘.围棋棋盘共有19纵19横.其中,位于(0,0)的星位叫天元,其余8个星位 ...

  2. leetcode-4-basic

    解题思路:这道题比较简单,代码不贴了.需要注意的是: 数字与字符串之间的转换, char str[100]; sprintf(str, "%d", num); 解题思路: 这道题是 ...

  3. Power Calculus UVA - 1374 迭代加深搜索

    迭代加深搜索经典题目,好久不做迭代加深搜索题目,拿来复习了,我们直接对当前深度进行搜索,注意剪枝,还有数组要适当开大,因为2^maxd可能很大 题目:题目链接 AC代码: #include <i ...

  4. 线段树:CDOJ1591-An easy problem A (RMQ算法和最简单的线段树模板)

    An easy problem A Time Limit: 1000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Pr ...

  5. optimize table在优化mysql时很重要

    一个表的数据量有1000W条,那么查看这么表占据的硬盘空间时会发现,数据本身是300M,索引是200M 这个时候,删除掉500W条数据,这个时候数据本身150M,而索引还是200M左右 你删除数据时, ...

  6. Mysql登陆、退出、更改环境编码

    登录: mysql -h[数据库地址] -u[username] -p[password] -P[端口]  //大写P表示端口,小写p表示密码 例如:mysql -hlocalhost -uroot ...

  7. 《Scrum实战》第1课【知易行难】全团课后任务汇总

          1组 孟帅(班长)   kecyru 2017-7-5 http://kecyru.blog.163.com/blog/static/27416617320176411513013 htt ...

  8. Leetcode39--->Combination Sum(在数组中找出和为target的组合)

    题目: 给定一个数组candidates和一个目标值target,求出数组中相加结果为target的数字组合: 举例: For example, given candidate set [2, 3, ...

  9. Apache JMeter汉化手册

    /*杜绝抄袭,分享请注明链接:http://www.cnblogs.com/yana789 Apache JMeter 应用是纯java开源的应用工具,压力测试和负载测试的容易上手工具. Apache ...

  10. js时间格式化工具,时间戳格式化,字符串转时间戳

    在开发中经常会用到时间格式化,有时候在网上搜索一大堆但不是自己想要的,自己总结一下,写一个时间格式化工具方便以后直接使用,欢迎大家来吐槽…… 1 2 3 4 5 6 7 8 9 10 11 12 13 ...