在面试时候,被问到了Hive的HQL是怎么转换成MapReduce任务的,回去查了一下资料并看了一下源码,在这里做一下整理。

编译过程概述

能大致说出编译过程,基本已经是满足面试要求了。HiveSQL ->AST(抽象语法树) -> QB(查询块) -> OperatorTree(操作树) ->优化后的操作树 ->mapreducer任务树 -> 优化后的mapreducer任务树

  • Antlr定义SQL的语法规则,完成SQL词法,语法解析,将SQL转化为抽象语法树AST Tree;
  • 遍历AST Tree,抽象出查询的基本组成单元QueryBlock;
  • 遍历QueryBlock,翻译为执行操作树OperatorTree ;
  • 逻辑层优化器进行OperatorTree变换,合并不必要的ReduceSinkOperator,减少shuffle数据量;
  • 遍历OperatorTree,翻译为MapReduce任务 ;
  • 物理层优化器进行MapReduce任务的变换,生成最终的执行计划

源码图解

从Beeline到MR任务执行的图解,大致说明了各个类的作用(图片可以点击放大)。

参考文章:

Hive的HSQL转换为MapReduce的过程_又菜又爱写 ᥬ᭄ᥬ᭄的博客-CSDN博客

Hive3.1.2的Beeline执行过程_虎鲸不是鱼的博客-CSDN博客_beeline源码

Hive的HQL的执行过程(怎么转换成MR、Spark等任务)相关推荐

  1. Hive是如何将hql语法转换成MR执行的

    Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能.说白了,hive就是MapReduce客户端,将用户编写的HQL语法转换成MR程序进行执行.那 ...

  2. hive底层原理 sql执行过程_Hive mapreduce SQL实现原理——SQL最终分解为MR任务,而group by在MR里和单词统计MR没有区别了-阿里云开发者社区...

    转自:http://blog.csdn.net/sn_zzy/article/details/43446027 SQL转化为MapReduce的过程 了解了MapReduce实现SQL基本操作之后,我 ...

  3. hive底层原理 sql执行过程_hive sql编译过程

    sql查询语句处理步骤流程图 准备实例,创建表,插入数据,写要分析的实例查询语句 1.首先创建两个表 2.创建两个表,并插入表数据,脚本略 3.编写咱们要解析的查询语句,即本篇要查询的实例语句. se ...

  4. java rmi 多ip_在rmi连接中客户端指定一个ip地址,但程序执行中却转换成另一个地址...

    局域网中的两台电脑想通过rmi技术连接通信 服务器端>ip地址:192.168.10.28 import java.net.MalformedURLException; import java. ...

  5. 【C/C++】程序环境,探索程序的执行过程(习得无上内功《易筋经》的第一步)

    目录 1.程序的翻译环境和执行环境 2.详解编译+链接 2.1翻译环境 2.2编译本身也分为几个阶段 预编译(预处理) 编译 汇编 详解符号表 形成符号表 2.3.链接 合并段表 符号表的合并和重定位 ...

  6. 伪代码block转换成程序流程图_程序设计基础

    1.程序与程序设计语言的基本知识 1)程序:为解决某一问题而采用程序设计语言编写的一个指令集合. 程序=算法(对操作的描述)+数据结构(对数据的描述)+程序设计语言+语言工具和环境. 2)程序的特点: ...

  7. Hive系列之HSQL转换成MapReduce过程

    hive的库.表等数据实际是hdfs系统中的目录和文件,让开发者可以通过sql语句, 像操作关系数据库一样操作文件内容, 比如执行查询,统计,插入等操作.一直很好奇hive是如何做到这些的.通过参考网 ...

  8. hql取满足条件最新一条记录_MySql 之一条查询sql的执行过程

    每当我把一条查询sql语句写完了,并且执行完得到想要的结果.这时我就在想为什么我写这样的一条sql语句,就能给我查询出我想要的结果,为什么我写了update就能更新一条语句?它们的执行过程是什么样的? ...

  9. 13-hive的执行过程

    1. MR 转 hive 的过程–逻辑分析 1.1 Join 实现的基本原理 select u.name, o.orderid from order o join user u on o.uid = ...

最新文章

  1. Dubbo使用Zooker注册服务
  2. PostgreSQL的安装和启动方法大全
  3. tensorflow 根据节点获取节点前的整张图
  4. Scrapy分布式原理及Scrapy-Redis源码解析(待完善)
  5. Error:To install them, you can run: npm install --save vue-style-loader css-loader……
  6. Android集成三方腾讯浏览器X5内核
  7. 余晨:我终于采访到了马斯克,他是个腼腆的钢铁侠
  8. Golang编程语言简介 go语言特点
  9. IPIP.net状告阿里云抄袭侵权
  10. 深入理解jvm 读后感
  11. 百德科技专业定制软件开发
  12. 2019智能网联汽车技术大会 | 感知+计算——解决智能网联汽车感知困境的必然趋势...
  13. 【玩转微信公众平台之九】 第一个功能:消息自动回复
  14. Android 6.0指纹识别App开发demo
  15. php限定符实例,PHP正则表达式限定符说明
  16. mybatis和spring框架的整合
  17. 3D游戏制作——AI坦克对战
  18. Damerau–Levenshtein Distance的java实现
  19. 字节、字、位、比特的关系
  20. 区块链中的merkle树有何作用?

热门文章

  1. xml 硕正报表_硕正轻量级富Web应用套件–硕正报表主要指标及功能清单
  2. DevOps企业实践指南(1):DevOps能为我们带来什么
  3. 大规模异构图召回在美团到店推荐广告的应用
  4. Chrome浏览器输入不安全站点,没有继续前往链接--解决方案thisisunsafe
  5. 什么是SUM函数以及如何在Python,Excel和Mathlab中使用?
  6. Eclipse 远程开发插件 RSE 及远程登录
  7. android 方向键 按钮,这不科学!安卓虚拟按键、实体键谁更好?
  8. js控制禁用退格键回到上一个页面
  9. 计算机网络层之 P2P
  10. Android 集成facebook 登录和分享