zoukankan      html  css  js  c++  java
  • Hive的执行生命周期

    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执行过程中的中间文件和临时文件  
    • 退出该条命令的执行,返回控制台并等待下一条命令的输入
  • 相关阅读:
    【线型DP】【LCS】洛谷P4303 [AHOI2006]基因匹配
    【状压DP】SCOI2005-洛谷P1896-互不侵犯 (状压例题)
    【01背包】百度之星--度度熊剪纸条
    【线型DP】CF1012C Hills 小山坡
    【经典DP】洛谷P2285 [HZOI]2004 打鼹鼠
    【盗版动归】Codeforces998C——Convert to Ones 归一操作
    MySQL使用笔记(1)
    大学物理——光的干涉和衍射(2)
    大学物理——光的干涉和衍射(1)
    hdu5747 Aaronson 贪心
  • 原文地址:https://www.cnblogs.com/skyl/p/4781692.html
Copyright © 2011-2022 走看看