大数据的仓库Hive原理(三)
来源:互联网 发布:数据库是什么文件 编辑:程序博客网 时间:2024/04/19 15:24
上次我们简单说了一下Hive的工作原理,今天我们来深入看一下它是如何把Hql语句转换为m/r来运行的。
1、编译器
简介
Hive编译器将一个Hive QL转换操作符。操作符Operator是Hive的最小的处理单元,每个操作符代表HDFS的一个操作或者一道MapReduce作业。
Operator都是hive定义的一个处理过程,其定义有:protected List <Operator<? extends Serializable >> childOperators; protected List <Operator<? extends Serializable >> parentOperators; protected boolean done; // 初始化值为false
所有的操作构成了Operator图,hive正是基于这些图关系来处理诸如limit, group by, join等操作。
执行流程
2、转换过程
Antlr定义SQL的语法规则,完成SQL词法,语法解析,将SQL转化为抽象语法树AST Tree
遍历AST Tree,抽象出查询的基本组成单元QueryBlock
遍历QueryBlock,翻译为执行操作树OperatorTree
逻辑层优化器进行OperatorTree变换,合并不必要的
ReduceSinkOperator,减少shuffle数据量
遍历OperatorTree,翻译为MapReduce任务物理层优化器进行MapReduce任务的变换,生成最终的执行计划
3、具体实现
Join的实现原理
select u.name, o.orderid from order o join user u on o.uid = u.uid;
在map的输出value中为不同表的数据打上tag标记,在reduce阶段根据tag判断数据来源。MapReduce的过程如下(这里只是说明最基本的Join的实现,还有其他的实现方式)
Group By的实现原理
select rank, isonline, count(*) from city group by rank, isonline;
将GroupBy的字段组合为map的输出key值,利用MapReduce的排序,在reduce阶段保存LastKey区分不同的key。MapReduce的过程如下(当然这里只是说明Reduce端的非Hash聚合过程)
Distinct的实现原理
select dealid, count(distinct uid) num from order group by dealid;
当 只有一个distinct字段时,如果不考虑Map阶段的Hash GroupBy,只需要将GroupBy字段和Distinct字段组合为map输出key,利用mapreduce的排序,同时将GroupBy字段作 为reduce的key,在reduce阶段保存LastKey即可完成去重
总结:
我们从认识Hive到理解它的运行原理,已经对其有了一定的了解。当然在实际应用中还会遇到各种问题,只要我们坚持去做,就没有什么做不到的。
- 大数据的仓库Hive原理(三)
- 大数据的仓库Hive原理(二)
- 大数据的仓库Hive学习(一)
- 大数据分析的技术栈(三)-Hive
- 大数据时代--Hive技术原理解析
- 大数据学习14:Hive中Join的原理和机制
- hadoop大数据平台手动搭建(三)-hive
- 大数据学习之Hive的安装
- 大数据Hive的操作_03_02
- 餐饮大数据-hive的JDBC操作
- 大数据时代的技术hive:hive介绍
- 大数据时代的技术hive:hive介绍
- 大数据时代的技术hive:hive介绍
- 大数据时代的技术hive:hive介绍
- (大数据之hive)hive的自定义函数练习
- 大数据时代的技术hive:hive介绍
- 大数据时代的技术hive:hive介绍
- 大数据时代的技术hive:hive介绍
- C++中的标准库模板STL
- 一次性检测出一个文件夹下的所有人脸
- 流媒体协议介绍(RTP/RTCP/RTSP/MMS/HLS/HTTP progressive streaming)
- swift map reduce 获取下标(index)的方法
- Web版Telnet工具设计与实现
- 大数据的仓库Hive原理(三)
- Dubbo源码分析(三)Exchanger
- 走遍世界 —— 日本
- Android5.0新特性CollapsingToolbarLayout图片拉缩
- PHP框架开发教程(四) 单一入口
- 设置listview高度包裹内容
- JAVA的反射机制浅谈
- 了解流程类型,第 4 部分:左右滑动类
- 收集的小工具1【win7文件删除】