我是靠谱客的博主 虚拟短靴,最近开发中收集的这篇文章主要介绍详解Hive-Driver——细读Hive源码(四),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

接着上一篇来说执行入口的分析,CliDriver最终将用户指令cmd提交给了Driver的run方法(针对常用查询语句而言),在这里用户的cmd将会被编译,优化并生成MapReduce任务进行执行。
这里写图片描述
所以Driver也是Hive的核心,他扮演了一个将用户查询和MapReduce Task转换并执行的角色,下来我们就来看看Driver是如何实现的?

  1. run函数:
 public CommandProcessorResponse run(String command, boolean alreadyCompiled)
throws CommandNeedRetryException {
CommandProcessorResponse cpr = runInternal(command, alreadyCompiled);
if(cpr.getResponseCode() == 0) {
return cpr;
}
SessionState ss = SessionState.get();
if(ss == null) {
return cpr;
}
.
.
.

run函数通过调用runInternal方法处理用户指令,在处理完成runInternal之后,如果执行过程中出现出错,还附加了对错误码和错误信息的处理,省略的部分就是错误的处理
在run函数中调用了runInternal,这也就是run函数的核心内容
2. 既然runInternal是核心内容,后面我们将逐步分析此函数
(1)
这里写图片描述
在这里先做了一个检测,确认在配置文件中HIVE_HADOOP_SUPPORTS_SUBDIRECTORIES等等的属性无误,否则报错。

这里写图片描述

这个就是return的值中实现的内容,返回了一个类,并在返回的过程中给类中的一些变量赋值。

(2)

 HiveDriverRunHookContext hookContext = new HiveDriverRunHookContextImpl(conf, command);
// Get all the driver run hooks and pre-execute them.
List<HiveDriverRunHook> driverRunHooks;
try {
driverRunHooks = getHooks(HiveConf.ConfVars.HIVE_DRIVER_RUN_HOOKS,
HiveDriverRunHook.class);
for (HiveDriverRunHook driverRunHook : driverRunHooks) {
driverRunHook.preDriverRun(hookContext);
}
} catch (Exception e) {
errorMessage = "FAILED: Hive Internal Error: " + Utilities.getNameMessage(e);
SQLState = ErrorMsg.findSQLState(e.getMessage());
downstreamError = e;
console.printError(errorMessage + "n"
+ org.apache.hadoop.util.StringUtils.stringifyException(e));
return createProcessorResponse(12);
}

首先根据配置文件和指令,构造用户Hook执行的上下文hookContext,然后读取用户PreRunHook配置指定的类(字符串),此配置项对应于Hive配置文件当中的“hive.exec.driver.run.hooks”一项,利用反射机制Class.forName实例化PreRunHook类实例(getHook函数完成),依次执行各钩子的功能(preDriverRun 函数完成)。
——-待完善

(3)
这里写图片描述

直接调用complieInternal函数编译用户指令,将指令翻译成MapReduce任务。在这里要解释一下 :synchronized (compileMonitor)是为了compileMonitor加上了同步锁,并且这个compileMonitor还仅为可读的。——-这里Monitor是一个空的对象,加上了同步锁,能起到什么样的作用呢?

最后

以上就是虚拟短靴为你收集整理的详解Hive-Driver——细读Hive源码(四)的全部内容,希望文章能够帮你解决详解Hive-Driver——细读Hive源码(四)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部