Hive的原理—— 深入淺出學Hive

sufeizi發表於2013-12-05
第一部分:Hive原理
為什麼要學習Hive的原理
?一條Hive HQL將轉換為多少道MR作業
?怎麼樣加快Hive的執行速度
?編寫Hive HQL的時候我們可以做什麼
?Hive 怎麼將HQL轉換為MR作業
?Hive會採用什麼樣的優化方式
Hive架構&執行流程
 
Hive執行流程
?編譯器將一個Hive QL轉換操作符
?操作符是Hive的最小的處理單元
?每個操作符代表HDFS的一個操作或者一道MapReduce作業
Operator
?Operator都是hive定義的一個處理過程
?Operator都定義有:
?protected List   extends Serializable >> childOperators; 
?protected List   extends Serializable >> parentOperators; 
?protected boolean done; // 初始化值為false
?所有的操作構成了 Operator圖,hive正是基於這些圖關係來處理諸如limit, group by, join等操作
 
Hive執行流程
操作符
描述
TableScanOperator
掃描hive表資料
ReduceSinkOperator
建立將傳送到Reducer端的
JoinOperator
Join兩份資料
SelectOperator
選擇輸出列
FileSinkOperator
建立結果資料,輸出至檔案
FilterOperator
過濾輸入資料
GroupByOperator
GroupBy語句
MapJoinOperator
/*+mapjoin(t) */
LimitOperator
Limit語句
UnionOperator
Union語句
?Hive通過ExecMapper和ExecReducer執行MapReduce任務
?在執行MapReduce時有兩種模式
?本地模式
?分散式模式
ANTLR詞法語法分析工具
?ANTLR—Another Tool for Language Recognition
?ANTLR 是開源的
?為包括Java,C++,C#在內的語言提供了一個通過語法描述來自動構造自定義語言的識別器(recognizer),編譯器(parser)和直譯器(translator)的框架
?Hibernate就是使用了該分析工具
 
Hive編譯器
 
 
 
 
編譯流程
 
第二部分:一條HQL引發的思考
案例HQL
?select key from test_limit limit 1
?Stage-1
?TableScan Operator>Select Operator-> Limit->File Output Operator
?Stage-0
?Fetch Operator
?讀取檔案
MapperInputFormat
?該hive MR作業中指定的mapper是:
?mapred.mapper.class = org.apache.hadoop.hive.ql.exec.ExecMapper
?input format是:
?hive.input.format  = org.apache.hadoop.hive.ql.io.CombineHiveInputFormat 
?該hive MR作業中指定的mapper是:
?mapred.mapper.class = org.apache.hadoop.hive.ql.exec.ExecMapper
?input format是:
?hive.input.format  = org.apache.hadoop.hive.ql.io.CombineHiveInputFormat 

更多內容:http://sishuok.com/forum/blogPost/list/6232.html

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29361362/viewspace-1062317/,如需轉載,請註明出處,否則將追究法律責任。

相關文章