先看0.7.1的執行過程:
hive> select * from table02 where id=500000;
對於這樣的乙個查詢,hive從clidriver這個類的main函式開始:
clidriver.main(string args)
clisessionstate ss=new clisessionstate(new hiveconf(sessionstate.class));
sessionstate.start(ss);
clidriver cli=new clidriver();
廢話不多說來到了主要的迴圈:
while((line=reader.readline(curprompt +"> "))!=null)
返回retvalue;
返回retvalue;
從tskrun返回
從driver.execute()返回成功值
return new commandprocessresponse(retvalue);
從proc.getresults(res) 列印query 結果
計算時間,列印出來
else 執行命令,set dfs等
return retvalue;
commandprocesso***ctory.clean()
返回返回值
終於回到了while迴圈體內。
} main函式體。
driver.compile(cmd); 就是根據hql語句做優化,生成plan.xml的地方。以後要重點分析下。
現在看下0.8.1有什麼改變
clidriver.main(string args)
} }sessionstate.start(ss);
clidriver cli = new clidriver();
while(讀取命令列)
ret=execute();}}
}}
} }}
Hive 執行流程簡述
hive 的架構 hive 的核心驅動 driver 1 直譯器 直譯器的作用是將 hivesql 語句轉換為抽象語法樹 ast 2 編譯器 編譯器是將語法樹編譯為邏輯執行計畫 3 優化器 優化器是將邏輯執行計畫優化為更優邏輯計畫 4 執行器 執行器是將邏輯計畫切成對應引擎的可執行物理計畫 執行流程...
Hive元件及Hive執行流程
元儲存 metastore 儲存 系統目錄以及關於表 列 分割槽等的元資料 的元件。驅動 driver 控制 hiveql 生命週期的元件,當 hiveql 查詢穿過 hive時。該驅動管理著會話控制代碼以及任何會話的統計。查詢編譯器 query compiler 是乙個元件,將hiveql編譯成有...
hive 查詢執行分析
group by 的實現 若只有乙個reduce 那麼結果是按照key全排序的 若有若干個reduce 那麼結果是部分排序 inner join 的實現 inner join 內連線 left out join right out join full outer join 是外連線 內連線 和 外連...