Hive主要模塊及調(diào)用關(guān)系

Hive工作原理

Hive的編譯器
編譯器主要有這么幾個(gè)模塊:Parser,SemanticAnalyzer,LogicPlanGenerator。

首先這些模塊都是在編譯器中,具體來說就是在
org.apache.hadoop.hive.ql.Driver#compile(java.lang.String, boolean)中。
Parser
在哪調(diào)用?
Parser是在
org.apache.hadoop.hive.ql.Driver#compile(java.lang.String, boolean)
中調(diào)用的,換句話說是在編譯期調(diào)用的。
調(diào)用方式是什么?
public int compile(String command, boolean resetTaskIds) {
...
ParseDriver pd = new ParseDriver();
ASTNode tree = pd.parse(command, ctx);
tree = ParseUtils.findRootNonNullToken(tree);
...
有哪些模塊?
首先parse在org.apache.hadoop.hive.ql.parse包下:
- org.apache.hadoop.hive.ql.parse.ParseDriver(解析器引擎)
- org.apache.hadoop.hive.ql.parse.HiveParser(hive解析器)
- org.apache.hadoop.hive.ql.parse.ParseUtils(解析工具)

各個(gè)模塊有哪些功能?
ParserDriver:
Hive采用Antlr實(shí)現(xiàn)SQL的詞法語法解析,其中語法規(guī)則定義在.g的文件中(在org.apache.hadoop.hive.ql.parse包下,可以看到.g文件)。在0.10版本之前,Hive.g文件是一個(gè),隨著語法規(guī)則的越來越復(fù)雜,由語法規(guī)則生成的Java解析類可能超過Java類文件的最大上限,0.11版本將Hive.g文件拆成了5個(gè)文件(詞法規(guī)則HiveLexer.g和4個(gè)語法規(guī)則文件)
| 語法文件 | 語法類 | 功能 |
|---|---|---|
| FromClauseParser.g | org.apache.hadoop.hive.ql.parse.HiveParser_FromClauseParser | from語法解析器 |
| HiveLexer.g | org.apache.hadoop.hive.ql.parse.HiveLexer | Hive詞法規(guī)則 |
| HiveParser.g | org.apache.hadoop.hive.ql.parse.HiveParser | 解析規(guī)則 |
| IdentifiersParser.g | org.apache.hadoop.hive.ql.parse.HiveParser_IdentifiersParser | 標(biāo)示語法解析 |
| SelectClauseParser.g | org.apache.hadoop.hive.ql.parse.HiveParser_SelectClauseParser | select語法解析 |
功能是什么?
工程解讀
accumulo-handler(不關(guān)注)
hive-accumulo-handler工程。hive對(duì)accumulo對(duì)支持。
Apache Accumulo 是一個(gè)可靠的、可伸縮的、高性能的排序分布式的 Key-Value 存儲(chǔ)解決方案,基于單元訪問控制以及可定制的服務(wù)器端處理。使用 Google BigTable 設(shè)計(jì)思路,基于 Apache Hadoop、Zookeeper 和 Thrift 構(gòu)建 。
ant(不關(guān)注)
hive-ant工程
應(yīng)該是一個(gè)打包的工具,沒細(xì)研究。
beeline(重點(diǎn))
*hive-beeline工程
HS2的beeline客戶端。用戶可以通過beeline的方式連接hive。
bin(重點(diǎn))
bin目錄
這個(gè)目錄下是hive相關(guān)的命令腳本,包括hive,beeline等等。
checkstyle
checkstyle目錄
這里是代碼規(guī)范相關(guān)的文件。
cli(重點(diǎn))
hive-cli工程
該工程下是Hive Cli相關(guān)。
common
hive-common工程
通用common包在這個(gè)工程下。
conf
conf目錄
這個(gè)目錄下是配置文件模版,如hive-site.xml。
contrib(不關(guān)注)
hive-contrib工程
這里有一些hive貢獻(xiàn)出來的實(shí)現(xiàn),如行自增函數(shù)UDFRowSequence等。
data(不關(guān)注)
data目錄
這里有配置還有一些測(cè)試文件等。
dev-support(不關(guān)注)
dev-support目錄
這里是一些開發(fā)相關(guān)的工具,如eclipse風(fēng)格配置文件等。
docs(不關(guān)注)
docs目錄
這里是一些文檔相關(guān),如hive的logo圖片,css樣式等。
findbugs(不關(guān)注)
findbugs目錄
插件FindBugs的配置文件。
hbase-handler
hive-hbase-handler工程
hive對(duì)Hbase的相關(guān)支持。
hcatalog
hive-hcatalog工程
hive對(duì)pig的支持。
hwi
hive-hwi工程
hwi是Hive Web Ui的縮寫,顧名思義就是Hive的web界面相關(guān)。
itests
jdbc(重點(diǎn))
hive-jdbc工程
hive對(duì)jdbc訪問方式的支持。
lib
lib目錄
用于存放第三方j(luò)ar
metastore(重點(diǎn))
metastore服務(wù)工程
hive的元數(shù)據(jù)存儲(chǔ)服務(wù),metastore不負(fù)責(zé)元數(shù)據(jù)的存儲(chǔ),只負(fù)責(zé)元數(shù)據(jù)的查詢服務(wù),元數(shù)據(jù)存儲(chǔ)通過mysql等。
odbc(重點(diǎn))
odbc工程
hive對(duì)odbc連接的支持
packaging
hive-packaging工程
打包工程,編譯完的包在packaging路徑下。
ql(重點(diǎn))
hive-exec工程
這是hive的核心工程,Driver等都在這個(gè)工程中。
serde
hive-serde
hive對(duì)序列化相關(guān)實(shí)現(xiàn)。
service(重點(diǎn))
hive-service
這里是通常所說的hiveserver2服務(wù)工程。
shims
hive-shims-aggregator工程
這里是hive和多版本hadoop兼容的支持。
spark-client
spark-client工程
hive對(duì)spark的支持。
testutils
testutils工程
該工程主要是一些測(cè)試項(xiàng)。