Hive源碼解析


date: 2020-07-08 15:12:00
updated: 2020-08-21 17:38:00

Hive源碼解析

入口:hive-cli-1.1.0-cdh5.14.4.jar!/org/apache/hadoop/hive/cli/CliDriver.class

參考文檔

1. 啟動

命令行輸入 hive 后,啟動log進程,建立一個客戶端Session,獲取到服務器的hive conf配置文件,啟動客戶端

啟動后 executeDriver(CliSessionState ss, HiveConf conf, OptionsProcessor oproc) 一直監聽輸入的 line; line 會按照 ; 來進行分割拼接成 command,對每一個 command 依次進行處理。command 一共分四種情況:① quit\exit ② source FilePath 指定執行某個文件里的語句 ③ 以 ! 開頭的 shell 命令 ④ 本地客戶端的各種命令(processLocalCmd(String cmd, CommandProcessor proc, CliSessionState ss))

通過讀取 conf 配置,拿到 Driver 信息,然后交給對應的 Driver 來執行命令:org.apache.hadoop.hive.ql.Driver.compile(String command, boolean resetTaskIds, boolean deferClose)

2. 解析命令

在 Driver 拿到命令后,runInternal(command, alreadyCompiled); 判斷是否已經編譯過,如果沒有的話,首先要進行語法解析,通過 org.apache.hadoop.hive.ql.parse.parseDriver.parse(String command, Context ctx) 生成 AST(AbstractSyntaxTree) 抽象語法樹

在 parse 目錄下存放5個文件
- HiveLexer.g :定義Hive關鍵字,及組成詞組的合法字符
    定義的規則如下:
    ```
    KW_SELECT : 'SELECT';
    KW_WHERE : 'WHERE';
    KW_FROM : 'FROM';
    fragment
    Letter
        : 'a'..'z' | 'A'..'Z'
        ;
    ```
- SelectClauseParser.g :定義select語句的語法規則
- FromClauseParser.g :定義from語句的語法規則
- IdentifiersParser.g :定義函數、group等的語法規則
- HiveParser.g:定義語法規則文件,引入了其他語法規則文件

BaseSemanticAnalyzer sem = SemanticAnalyzerFactory.get(this.conf, tree); 對拿到的AST進行解析
this.schema = getSchema(sem, this.conf); 返回Hive表的字段信息
this.plan = new QueryPlan(queryStr, sem, perfLogger.getStartTime("Driver.run"), queryId, SessionState.get().getHiveOperation(), this.schema, this.queryDisplay); 生成執行計划
this.plan.getFetchTask().initialize(this.conf, this.plan, (DriverContext)null); 對執行計划中拉取數據的任務進行初始化

針對 QueryPlan,調用 Driver.exexute() 執行job

String queryId = this.conf.getVar(ConfVars.HIVEQUERYID);
String queryStr = HiveConf.getVar(this.conf, ConfVars.HIVEQUERYSTRING);

3. Hive 可使用的函數

hive-exec 包下 org.apache.hadoop.hive.ql.exec.FunctionRegistry.java


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM