Hive SQL的执行流程

【为什么要了解hive执行流程】

  1. .当我们写了一个sql,但是执行起来很慢,这时如果我们知道这个sql的底层执行流程是怎样的,就会比较容易去优化
  2. .如果我们在面试中被问及对hive的理解,如果说就是写sql会显得很片面,如果我们了解hive的执行流程,就会知道,虽然表面上是写sql,但是在从hive的sql,到最终出来执行结果,中间经历了MR流程,其中MR的map,combiner,shuffle,reduce具体是执行了hive的那个部分,这样就会比较全面。

【分析基于hadoop之上的SQL执行流程】

  • 基本SQL框架

【例表:traffic_info】

NAME ID TRAFFIC
YY 1001 204

【例表:TV_info】

ID BOSS
1001 若老
  1. select  name,count(1)  from traffic_info group by name;
  2. select a.name,a.id,a.traffic,b.boss from traffic_info a join TV_info b on a.id=b.id
  • 解析:这两个简单的sql基本上涵盖了所有的大数据sql的框架,也就是说无论多磨复杂的大数据sql最终都会落到这两个简单的sql框架上,基本上不会有第三种,之所以我们会觉得sql千变万化,非常复杂,基本上都是业务的复杂度的原因

【图解sql执行流程】

  • sql写出来以后只是一些字符串的拼接,所以要经过一系列的解析处理,才能最终变成集群上的执行的作业
  1. Parser:将sql解析为AST(抽象语法树),会进行语法校验,AST本质还是字符串
  2. Analyzer:语法解析,生成QB(query block)
  3. Logicl Plan:逻辑执行计划解析,生成一堆Opertator Tree
  4. Logical optimizer:进行逻辑执行计划优化,生成一堆优化后的Opertator Tree
  5. Phsical plan:物理执行计划解析,生成tasktree
  6. Phsical Optimizer:进行物理执行计划优化,生成优化后的tasktree,该任务即是集群上的执行的作业
  • 结论:经过以上的六步,普通的字符串sql被解析映射成了集群上的执行任务,最重要的两步是 逻辑执行计划优化和物理执行计划优化(图中红线圈画)

【SQL与MR流程之间的关系】

  • 1.过滤类SQL与MR的关系
  • 执行sql:select a.id,a,city, a.cate form access a where a.day=’20190414’ and a.cate= ‘大奔’

  • 结论:过滤类的sql相当于ETL的数据清洗过程,并没有reduce过程,分区的过滤在读取数据的时候就已经进行了。map的个数是由分片数决定的。
  • 聚合分组类SQL与MR的关系
  • select city, count(1) form access a where a.day=’20190414’ and a.cate= ‘奔驰’ group by city
  • 结论:
  1. .其实这个过成和WC是非常相似的,在各自的分片中,都是把数据分割以后每个值都对应一个1得到<key,1>,再经过本地reduce(combine过程)把key一样的value=1相加,得到新的<key,values>,再经过shuffle过程,把所有分片中的<key,values>,key一致的values相加,又得到最终的<key,values>。
  2. combiner其实是一个本地的reduce主要就是为了减轻reduce的负担,但并不是所有的场景都会发生combiner,例如求平均数。

【知识扩展】

  • 扩展1:reducebykey和groupbykey的区别,前者会发生combiner 局部聚合,而后者不会,前者获得的是相同key对应的一个元素,后者是获取元素集合。reducebykey更加适合大数据,少用groupbykey(全数据shuffle)
  • 扩展2:map task数是由数据文件分片数决定的分片数即是map任务数,程序员只能给个期望值
  • 扩展3:reduce task数是由输入reduce的数据的分区(partitions)数决定的即分区数为map任务数,默认是1,程序员可直接设置reduce个数来改变reduce task数,reduce task数决定来 生成的文件数。
  • 扩展4: MR数据shuffle确定数据发往哪一个reduce分区的规则是:取key的hashcode值对分区数模。
  • 扩展5:explain sql ;查看某sql语句的执行计划

【知识拓展来自以下博客】

作者:qq_32641659
来源:CSDN
原文:https://blog.csdn.net/qq_32641659/article/details/89421655
版权声明:本文为博主原创文章,转载请附上博文链接!

官网:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Explain

原文地址:https://www.cnblogs.com/xuziyu/p/10750772.html

时间: 2024-08-01 13:46:41

Hive SQL的执行流程的相关文章

MySql基础架构以及SQL语句执行流程

01. mysql基础架构 SQL语句是如何执行的 学习一下mysql的基础架构,从一条sql语句是如何执行的来学习. 一般我们写一条查询语句类似下面这样: select user,password from mysql.user; 这样就可以返回一个结果,但却不知这条语句的内部执行流程. 如下是mysql的逻辑架构图: Mysql可以分为Server层和存储引擎层二部分. Server层有连接器/缓存/分析器/优化器/执行器,涵盖了mysql的很多核心功能. 存储引擎层负责数据的存储和读取,支

hive sql的执行及编译过程

一.hive在执行sql时会以mapreduce的方式对数据进行接入和处理,其主要包含以下几个阶段:1.hive首先根据sql语句中的表从hdfs文件中获取数据,对数据文件进行split操作,使其可以一行一行将所需数据读入内存:2.map函数将内存中的数据按照key值进行映射,形成一行一行的key-value值,比如用户表中的性别字段,内存中map处理后的记录如下:3.在实际应用中会有多台机器参与map处理,map完成后需要将带有相同key的数据分发到同一台集群去进行后续处理,此时的操作称为sh

MyBatis源码分析-SQL语句执行的完整流程

MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录.如何新建MyBatis源码工程请点击MyBatis源码分析-IDEA新建MyBatis源码工程. MyBatis框架主要完成的是以下2件事情: 根据JD

转 深入浅出Mybatis系列(十)---SQL执行流程分析(源码篇)

深入浅出Mybatis系列(十)---SQL执行流程分析(源码篇) 最近太忙了,一直没时间继续更新博客,今天忙里偷闲继续我的Mybatis学习之旅.在前九篇中,介绍了mybatis的配置以及使用, 那么本篇将走进mybatis的源码,分析mybatis 的执行流程, 好啦,鄙人不喜欢口水话,还是直接上干活吧: 1. SqlSessionFactory 与 SqlSession. 通过前面的章节对于mybatis 的介绍及使用,大家都能体会到SqlSession的重要性了吧, 没错,从表面上来看,

深入浅出Mybatis系列(十)---SQL执行流程分析(源码篇)

原文地址:http://www.cnblogs.com/dongying/p/4142476.html 最近太忙了,一直没时间继续更新博客,今天忙里偷闲继续我的Mybatis学习之旅.在前九篇中,介绍了mybatis的配置以及使用, 那么本篇将走进mybatis的源码,分析mybatis 的执行流程, 好啦,鄙人不喜欢口水话,还是直接上干活吧: 1. SqlSessionFactory 与 SqlSession. 通过前面的章节对于mybatis 的介绍及使用,大家都能体会到SqlSession

[转] Oracle sql 语句执行过程图文分析

[原文链接]  http://nvd11.blog.163.com/blog/static/200018312201301310585758/ [原文视频]  http://www.jiagulun.com/thread-2674-1-1.html 1. 数据库文件Oracle 数据库文件大概可分为3种,分别是:控制文件(control files): 存放数据库本身物理结构信息数据文件(data files): 存放数据库数据啦~日志文件(log files):  包括重做日志文件和归档日志文

Hive SQL执行流程分析

转自 http://www.tuicool.com/articles/qyUzQj 最近在研究Impala,还是先回顾下Hive的SQL执行流程吧. Hive有三种用户接口: cli (Command line interface) bin/hive或bin/hive –service cli 命令行方式(默认) hive-server/hive-server2 bin/hive –service hiveserver 或bin/hive –service hiveserver2 通过JDBC/

步步深入:MySQL架构总览-&gt;查询执行流程-&gt;SQL解析顺序

前言: 一直是想知道一条SQL语句是怎么被执行的,它执行的顺序是怎样的,然后查看总结各方资料,就有了下面这一篇博文了. 本文将从MySQL总体架构--->查询执行流程--->语句执行顺序来探讨一下其中的知识. 一.MySQL架构总览: 架构最好看图,再配上必要的说明文字. 下图根据参考书籍中一图为原本,再在其上添加上了自己的理解. 从上图中我们可以看到,整个架构分为两层,上层是MySQLD的被称为的‘SQL Layer’,下层是各种各样对上提供接口的存储引擎,被称为‘Storage Engin

MySQL架构总览-&gt;查询执行流程-&gt;SQL解析顺序

前言: 一直是想知道一条SQL语句是怎么被执行的,它执行的顺序是怎样的,然后查看总结各方资料,就有了下面这一篇博文了. 本文将从MySQL总体架构--->查询执行流程--->语句执行顺序来探讨一下其中的知识. 一.MySQL架构总览: 架构最好看图,再配上必要的说明文字. 下图根据参考书籍中一图为原本,再在其上添加上了自己的理解. 从上图中我们可以看到,整个架构分为两层,上层是MySQLD的被称为的'SQL Layer',下层是各种各样对上提供接口的存储引擎,被称为'Storage Engin