hive源代碼解析之一hive主函數入口


hive其實做的就是解析一條sql然后形成到mapreduce任務,就是一個代碼解釋器。hive源代碼本身就可以分為ql/metasotre/service/serde 這幾塊;其中

  對於Hive來說,ql是整個Hive最最核心的一個模塊,Hive主要的功能都集中在這樣一個模塊中,即org.apache.hadoop.hive.ql.*,其中最重要的幾個模塊:

  • parse:語法解析器和語義分析器,將SQL轉化為執行計划。
  • optimizer:優化器,包括執行計划Operator圖的改寫(邏輯優化)和Task圖的改寫(物理優化)
  • exec:執行器,作業提交和執行相關。
  • udf:Hive內置的用戶自定義函數,包括操作符加、減、乘、除、與、或、非,常用數學操作(sin、cos等)、字符串操作(substr、instr)、聚合操作(count、sum、avg等)等。

 

 

 

 

 

      無論使用CLI、Thrift Server、JDBC還是自定義的提交工具,最終的HQL都會傳給Driver實例,執行Driver.run()方法。從這種設計也可以看出,如果您要開發一套自定義的Hive作業提交工具,最好的方式是引用Driver實例,調用相關方法進行開發。
      而Driver.run()方法,獲得了這樣一個HQL,則會執行兩個重要的步驟:編譯和執行,即Driver.complie()和Driver.execute()。對於Driver.comile()來說,其實就是調用parse和optimizer包中的相關模塊,執行語法解析、語義分析、優化(回想一下大學時的編譯原理,編譯的過程是不是語法分析、語法解析、語義分析);對於Driver.run()來說,其實就是調用exec包中的相關模塊,將解析后的執行計划執行,如果解析后的結果是一個查詢計划,那么通常的作法就是提交一系列的MapReduce作業。

以查詢的執行為例,整個Hive的流程是非常簡單的一條直線,由上到下進行。

 

對於main函數,其中主要做了三件事情:

(1)初始化各種配置和參數;

(2)循環執行解析執行各種命令;

 

 

 


免責聲明!

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



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