Hive
文章平均质量分 51
本专栏用于存放Hive的原理学习和使用过程中的一些记录
热干面的日常学习
我觉得靓仔这个词听着很舒服,虽然我不是广东的
展开
-
Hive3.1.2源码阅读--图总结
关于hive源码解读整个流程是参考了寒暄的博客了的,可以过去看一下他的博客以下图片是整个代码执行的流程图,可以在阅读完源码以后作为一个回顾原创 2022-03-26 16:48:08 · 1947 阅读 · 0 评论 -
Hive3.1.2源码阅读--SQL的解析、编译、优化(二)
从前文中可以看到runInternal调用了compile方法,在compile方法我们可以看到执行了以下步骤:1.1 首先通过ParseUtils.parse将sql解析为抽象的语法树ASTNode1.2 然后通过sem.analyze(tree, ctx);对解析出来的抽象语法树进行编译和优化我们先进入ParseUtils.parse中进行查看 /** Parses the Hive query. */ public static ASTNode parse(String command.原创 2022-03-26 16:14:36 · 2458 阅读 · 0 评论 -
Hive3.1.2源码阅读--SQL的解析、编译、优化(一)
由前文可知,真正执行sql的位置是ret = qp.run(cmd).getResponseCode();ctrl+鼠标左键进入run方法中,发现其中是一个抽象方法按ctrl+H查看层级,进入Driver中,Driver中对run进行了实现;即真正的处理均在Driver中实现的,而run方法则是这个类的入口可以发现run方法调用同名的方法,但输入参数多了一个alreadyComplied,该参数表示是否已经编译完成 @Override public CommandProcessorR.原创 2022-03-26 14:51:45 · 3063 阅读 · 0 评论 -
Hive3.1.2源码阅读--处理sql语句 processLine-->processCmd-->processLocalCmd
由上文进入processLine方法中1.1 该方法用于在特殊情况下可以中止作业的执行1.2 定义了两种作业中止的方式① ctrl+c 当连续两次触发 Ctrl+c 作业中断② kill -21.3 HadoopJobExecHelper 这个类中保存了正在运行的hadoop job;通过其方法killRunningJobs杀死所有正在运行的任务//processLine可以理解为作业上了一道保险,确保如果因为特殊情况需要中止作业的话有结束的方法。 public int processL.原创 2022-03-21 08:29:58 · 1318 阅读 · 0 评论 -
Hive3.1.2源码阅读--提交任务executeDriver
由上文可知,客户端的驱动工作是在executeDriver中进行的调用该方法时传入了三个参数:1.1 ss hiveconf用户配置1.2 conf hiveconf默认配置1.3 oproc 用户环境配置ctrl+左键进入该方法中2.1 首先根据前面解析出来的参数,将对应的参数值封装到CliDriver对象中2.2 如果是-e的执行方式,则直接执行后面的sql语句;如果是-h的执行方式,则执行对应的sql脚本文件2.3 如果执行引擎是mapreduce的话,则输出一些告警信息(hive.原创 2022-03-16 08:05:04 · 1562 阅读 · 0 评论 -
Hive3.1.2源码阅读--程序入口CliDriver
根据前言可以看出,第一步是cli向Driver提交作业,因此我们需要找到代码中的CliDriver类,并搜索出里面的main方法,一切从main开始,如图所示可以看到main方法中创建了一个CliDriver对象,然后调用了他的run方法 public static void main(String[] args) throws Exception { int ret = new CliDriver().run(args); System.exit(ret); }我们先.原创 2022-03-16 07:40:23 · 1905 阅读 · 0 评论 -
Hive--前言
1.Hive的基本概念1.1前言在学习Hive原理之前,你必须对Hadoop有一定的了解并且使用过HQL,否则建议先学习Hadoop。1.2什么是HiveHive是由Facebook开源的用于解决海量结构化日志的数据统计工具。Hive是一个基于Hadoop的数据仓库工具,可以将结构化数据映射为一张表,并提供类似于Mysql中SQL的功能。其本质是将HQL转化为一个MapReduce任务,然后在Hadoop集群上执行。Hive处理的数据存储在HDFS上Hive分析数据底层是通过MR程序实原创 2022-03-06 21:43:37 · 1724 阅读 · 0 评论 -
MapReduce实现sql的原理
1.join的实现原理select u.name, o.orderid from order o join user u on o.uid = u.uid;在map阶段的输出中给每个value一个tag,用于区分数据来源,在shuffle过程将具有相同key的数据合并在一起,在reduce阶段对key相同的不同来源的数据进行join。2.group by的实现原理select rank, isonline, count(*) from city group by rank, isonline原创 2021-04-28 10:48:02 · 424 阅读 · 0 评论 -
Hive中SQL语句到MapReduce过程的映射
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表。通过给用户提供的一系列交互接口,接收到用户的指令(SQL),使用自己的Driver,结合元数据(MetaStore),将这些指令翻译成MapReduceHiveSQL被解析器解析为抽象语法树ASTAST经过语义分析转化为Query Block(查询块)遍历Query Block(查询块)生成Operator Tree(操作树)优化器优化Operator Tree,合并不必要的操作,减少shuffle数据量遍历优化原创 2021-04-28 10:44:24 · 235 阅读 · 0 评论 -
Hive调优
where条件优化优化前(关系数据库不用考虑会自动优化):select m.cid,u.id from order m join customer u on( m.cid =u.id )where m.dt='20180808';优化后(where条件在map端执行而不是在reduce端执行):select m.cid,u.id from (select * from order where dt='20180818') m join customer u on( m.cid =u.id);.原创 2021-04-28 10:43:46 · 72 阅读 · 0 评论 -
Hive存储格式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EVrTPBh2-1619577726246)(C:\Users\chenyw\AppData\Roaming\Typora\typora-user-images\image-20210326163202005.png)]TextFile:(能直接加载数据)行存储、Gzip压缩,压缩后的文件不支持split 在反序列化过程中,必须逐个字符判断是不是分隔符和行结束符,反序列化开销大;默认格式,建表时不指定默认为这个格式.原创 2021-04-28 10:42:55 · 449 阅读 · 1 评论 -
Hive窗口函数
一、窗口函数OVER()指定分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变而变化CURRENT ROW:当前行n PRECEDING:往前n行数据n FOLLOWING:往后n行数据UNBOUNDED:起点,UNBOUNDED PRECEDING 表示从前面的起点, UNBOUNDED FOLLOWING表示到后面的终点LAG(col,n):往前第n行数据LEAD(col,n):往后第n行数据NTILE(n):把有序分区中的行分发到指定数据的组中,各原创 2021-04-28 10:41:43 · 215 阅读 · 0 评论 -
Hive中with/with as 的用法
1.with as 是什么with...as...需要定义一个sql片段,会将这个片段产生的结果集保存在内存中,后续的sql均可以访问这个结果集和,作用与视图或临时表类似。2.用法① 完整格式with q1 as ( select key from src where key = '5')select * from q1;② 同级的多个q之间用,分割with只需要一次,as后的子句必须用()with q1 as ( select key from q2 where key = '5'),q原创 2020-10-27 14:15:30 · 2582 阅读 · 0 评论 -
Hive中的order by,sort by,distribute by,cluster by 的区别
1.order byorder by 可以指定desc/ascorder by 会对输入做全局排序,因此只有一个reduce(多个reducer无法保证全局排序),但是一个reducer,会导致当输入规模较大时,计算时间会变长。2.sort bysort by 不是全局排序,其数据在进入reducer钱完成排序,因此如果用sort by进行排序,兵器让设置mapped.reduce.task>1,则sort by只会保证每个reducer的输出有序,并不保证全局有序。(全排序的实现:先sort原创 2020-10-27 14:00:03 · 264 阅读 · 0 评论 -
Hive调优-压缩,分区分桶,表的优化
有没有掌握hive调优,是判断一个数据工程师是否合格的重要指标1.数据的压缩与存储格式原创 2020-10-27 13:06:25 · 515 阅读 · 0 评论 -
Hive中的内部表和外部表
1.内部表和外部表的区别内部表:加载数据到Hive所在的Hdfs目录,删除时,元数据和数据文件都删除外部表:不加载数据到Hive所在的Hdfs目录,删除时,只会删除表结构,相比较之下,外部表更加安全,防止误删数据文件。2.使用场景内部表:做统计分析时候用到的中间表,结果表可以使用内部表,这些数据不需要共享,使用内部表更为合适。并且很多时候结果分区表我们只需要保留最近3天的数据,用外部表的时候删除分区时无法删除数据。外部表:每天采集的ng日志和埋点日志,日志数据是采集程序实时采集进来的,一旦被原创 2020-10-26 10:48:43 · 701 阅读 · 0 评论