1.入口$HIVE_HOME/bin/ext/cli.sh

  • 调用org.apache.hadoop.hive.cli.CliDriver类进行初始化过程
  • 处理-e,-f,-h等信息,如果是-h,打印提示信息,并退出
  • 读取hive的配置文件和$HIVE_HOME/bin/.hiverc文件,设置HiveConf
  • 创建一个控制台,进入交互模式

2.读取命令processLine分割处理

  • 在交互模式下,processLine方法读取命令行,以";"分割成多个命令
  • 然后交给processCmd(cmd)处理

3.命令的预处理processCmd

  根据输入命令的第一个记号(Token),分别进行处理

  • Quit/Exit系统正常退出
  • !开头的执行Linux操作系统命令
  • source 开头的读取外部文件并执行文件中的命令
  • list 列出缓存中的jar/file/archive
  • 其他命令提交给CommandProcess处理

4.命令的预处理CommandProcess

  根据输入命令的第一个记号,分别进行处理

  • set 调用SetProcess类,设置hive的环境参数,并保存在该进程的HiveConf中
  • dfs 调用DfsProcess类,调用hadoop的shell接口,执行hadoop的相关命令
  • add 调用AddResourceProcess类,导入外部的资源,只对该进程有效
  • delete 与add对应,删除资源
  • 其他:提交给Driver类,进行下一步处理

5.命令的处理(Driver类的run方法)

  • 编译器Compile:首先检查SQL中表和列是否存在,再利用第三方工具Antlr检查SQL语法是否正确,将正确的SQL解析成抽象语法树(AST),最后将AST编译成逻辑执行计划Logical Paln
  • 优化器Optimizor:将逻辑执行计划转化成可以运行的物理执行计划Physical Plan,即MR任务执行,并对其进行优化
  • 执行器Executor:调用genMapRed()方法执行优化后的MR任务
  • 获取读写锁:对操作的表获取一个读写锁acquireReadWriteLocks
  • 执行execute:将生成的Task提交hadoopAPI 处理,返回任务的执行时间和状态(成功or失败)

6.获取执行的结果

  • 任务执行失败,抛出异常
  • 执行成功后,调用Driver的GetReuslt方法,顺序打开每一个输出文件
  • 获取每一行的输出,并打印到控制台

7.执行清理

  • 清理hive执行过程中的中间文件和临时文件
  • 退出该条命令的执行,返回控制台并等待下一条命令的输入

Hive的执行生命周期的更多相关文章

  1. 微信小程序onLaunch、onLoad执行生命周期

    原文转载自:微信小程序onLaunch.onLoad执行生命周期 1.需求:先执行App的onLaunch添加验证权限等,再执行Page里的onLoad. 2.问题:还没有等onLaunch执行完成, ...

  2. HTML,javascript,image等加载,DOM解析,js执行生命周期

  3. .NET MVC执行过程 及 生命周期步骤

    1.网址路由比对 2.执行Controller与Action 3.执行View并返回结果 Request 请求到来 IIS 根据请求特征将处理权移交给 ASP.NET UrlRoutingModule ...

  4. react教程 — 组件的生命周期 和 执行顺序

    一.组件执行的生命周期:                  参考  https://www.cnblogs.com/soyxiaobi/p/9559117.html  或  https://www.c ...

  5. React源码剖析系列 - 生命周期的管理艺术

    目前,前端领域中 React 势头正盛,很少能够深入剖析内部实现机制和原理.本系列文章希望通过剖析 React 源码,理解其内部的实现原理,知其然更要知其所以然. 对于 React,其组件生命周期(C ...

  6. [转]: 两分钟彻底让你明白Android Activity生命周期(图文)!

    转自:http://blog.csdn.net/android_tutor/article/details/5772285 大家好,今天给大家详解一下Android中Activity的生命周期,我在前 ...

  7. MVC网址路由与生命周期

    这篇写得比较详细,所以我收藏一下. 转载自: http://www.cnblogs.com/Eleanore/archive/2012/11/23/2783061.html 一.网址路由 1.1  比 ...

  8. Android生命周期详细说明

    提供两个关于Activity的生命周期模型图示帮助理解:                                           图1 图2 从图2所示的Activity生命周期不难看出, ...

  9. 1.3 ASP.NET MVC生命周期

    ASP.NET MVC的执行生命周期主要分为三个阶段,分别是网址路由对比.执行控制器与动作.执行视图并返回结果.从ASP.NET MVC接受HTTP请求到返回HTTP响应的过程如下图所示.

随机推荐

  1. webpack4学习笔记(一)

    webpack4 1,安装webpack npm insatll webpack --save-dev //安装最新版本 npm insatll webpack@<version> --s ...

  2. JS获取浏览器信息及屏幕分辨率

    因为vue有自己的生命周期,初始化数据的时候,可以在钩子函数created()函数里初始化数据,也可以在mounted()函数里获取,但是两者是不同的,获取浏览器和屏幕分辨率的时候,不能在create ...

  3. 关于Android项目隐藏标题栏的方法总结

    1.在代码中添加这么一行代码 this.requestWindowFeature(Window.FEATURE_NO_TITLE); 注意:这段代码需要写在setContentView()之前,否则会 ...

  4. 理解MySQL——并行数据库与分区(Partition)

    1.并行数据库 1.1.并行数据库的体系结构并行机的出现,催生了并行数据库的出现,不对,应该是关系运算本来就是高度可并行的.对数据库系统性能的度量主要有两种方式:(1)吞吐量(Throughput), ...

  5. Win32 配置文件用法

    #include "stdafx.h"#include <Shlobj.h>#include <Shlwapi.h> #pragma comment(lib ...

  6. explain(desc)命令的使用

    获取 type:查询类型 1.可以判断出,全表扫描还是索引扫描(ALL就是全表扫描,其他就是索引扫描) 2.对于索引扫描来讲,可以西划分,可以判断是哪一种扫描 type的具体类型介绍: ALL:全表扫 ...

  7. 前端 javascript 数据类型

    JavaScript 中的数据类型分为原始类型和对象类型: 原始类型 数字 字符串 布尔值 对象类型 数组 “字典” ...

  8. 『HTML5挑战经典』是英雄就下100层-开源讲座(二)危险!英雄

    本篇为<『HTML5挑战经典』是英雄就下100层-开源讲座>第二篇,需要用到开源引擎lufylegend,可以到这里下载: 下载地址:http://lufylegend.googlecod ...

  9. Spark 2.0 PCA主成份分析

    PCA在Spark2.0中用法比较简单,只需要设置: .setInputCol(“features”)//保证输入是特征值向量 .setOutputCol(“pcaFeatures”)//输出 .se ...

  10. php about session store db or cache

    PHP关于Session的配置: 在php.ini中配置为:session.name = PHPSESSID 在请求开始的时候,会话名称会被重置并存储到session.name配置项. 所以要想在不改 ...