Hive查询流程分析git
各个组件的做用api
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的一部分
app
Presto查询流程分析
gitlab
在Map/Reduce阶段 执⾏计划包含Map操做树 操做树在Mappers上执⾏ 和reduce性能
各个组件的做用
fetch
Client(客户端):提交数据操做的窗口
插件
Discovery Server(服务发现者):存储可用的Server列表
Coordinator(协调者): 接收数据操做,解析SQL语句,生成查询计划,分发任务至Worker机
Connector Plugin(链接插件):链接Storagr,提供元数据,支持Hive、Kafka、MySQL、MonogoDB、Redis、JMX等数据源,可自定义
Worker(执行者):执行查询计划
rest
查询流程
一、Client使用HTTP协议发送一个query请求
二、经过Discovery Server发现可用的Server
三、Coordinator构建查询计划(经过Anltr3解析为AST(抽象语法树),而后经过Connector获取原始数据的Metadata信息,生成分发计划和执行计划)
四、Coordinator向workers发送任务
五、Worker经过Connector插件读取数据
六、Worker在内存里执行任务(Worker是纯内存型计算引擎)
七、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缺点
一、没有容错能力,当一个query分发到多个Worker去执行时,当有一个Worker由于各类缘由查询失败,Master感知到以后,整个query也会失败
二、内存限制,因为Presto是纯内存计算,因此当内存不够时,Presto并不会将结果dump到磁盘上,因此查询也就失败了(听说最新版本的Presto已经支持写盘操做)
三、并行查询,由于全部的task都是并行执行,若是其中一台Worker由于各类缘由查询很慢,那么整个query就会变得很慢
四、并发限制,由于全内存操做+内存限制,能同时处理的数据量有限,于是致使并发能力不足
Mob项目的应用http://gitlab.code.mob.com/mobdata-plat/dbcloud-api