笔记:Hive交互的过程简述

同样,本文也仅仅是个人笔记

前段时间在做与Hive相关的工作,于是简单整理一下Hive交互的过程吧。

 

一、解析部分

1.系统建立jvm,利用反射机制运行Hive

2.CliDriver.main 解析cmdline的主程序,将有‘;'的输入分割组合成一句完整的sql

3.CliDriver.processLine 分析运行一句sql

4.CliDriver.processCmd

5.compile 判断合法性,并且生成一个ASTNode对象以及一个QueryPlan对象

6.利用SematicAnalyzer,从plan对象中获取语法分析结果,并且将其一个一个put入runnableTask的队列中

7.从队列中取材队头,执行task.execute

二、运行部分

执行Map/Reduce作业,略过

三、取得执行结果

1.在CliDriver中调用跑完Map/Reduce后,利用Driver.getResult获取

2.顺序打开每个输出文件

3.使用Fetchtask.fetch()获得,实际上是调用FetchOperator.getNextRow,打开Reader,获取每一行的输出

4.将所有的输出组合,打印到控制台

四、结束清理

1.删除hive.exec.plan下的文件

2.删除hive.exec.scratchdir下的文件

3.实际上,在对目录进行删除时,先删除所有的子文件,然后对EditLog进行同步操作,最后删除目录

 

从整个流程来看,存在一个问题:若一个Hive语句写的不好,有可能出现非常多的map而没有reduce,因此输出文件将非常多,fetch输出结果需要顺序读取多个文件,造成大量的文件打开、读、关闭操作,将变得十分耗时,对于用户而言,有可能在控制台看到Map/Reduce100%结束,但还需要等待一段时间,才能获得sql语句的结果,而结果的条数有可能很少,因为很多map的输出文件其实是空文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值