Hive SQL 编译过程详解(繁体)

Hive SQL 编译过程详解(繁体)

ID:40555649

大小:1.60 MB

页数:41页

时间:2019-08-04

Hive SQL 编译过程详解(繁体)_第1页
Hive SQL 编译过程详解(繁体)_第2页
Hive SQL 编译过程详解(繁体)_第3页
Hive SQL 编译过程详解(繁体)_第4页
Hive SQL 编译过程详解(繁体)_第5页
资源描述:

《Hive SQL 编译过程详解(繁体)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、HiveSQL編譯過程詳解目錄[-]·1、MapReduce實現基本SQL操作的原理·1.1Join的實現原理·1.2GroupBy的實現原理·1.3Distinct的實現原理·2、SQL轉化為MapReduce的過程·2.1Phase1SQL詞法,語法解析·2.1.1Antlr·2.1.2抽象語法樹ASTTree·2.1.3樣例SQL·2.1.3SQL生成ASTTree·2.2Phase2SQL基本組成單元QueryBlock·2.2.1QueryBlock·2.2.2ASTTree生成QueryBlock·2.3Phase3邏輯操作符Operator·2.3.1Ope

2、rator·2.3.2QueryBlock生成OperatorTree·2.4Phase4邏輯層優化器·2.4.1PredicatePushDown優化器·2.4.2NonBlockingOpDeDupProc優化器·2.4.3ReduceSinkDeDuplication優化器·2.5Phase5OperatorTree生成MapReduceJob的過程·2.5.1對輸出表生成MoveTask·2.5.2開始遍歷·2.5.3Rule#1TS%生成MapReduceTask物件,確定MapWork·2.5.4Rule#2TS%.*RS%確定ReduceWork·2.5.5

3、Rule#3RS%.*RS%生成新MapReduceTask物件,切分MapReduceTask·2.5.6R4FS%連接MapReduceTask與MoveTask·2.5.7合併Stage·2.5.8切分MapReduce階段·2.5.9OperatorTree生成MapReduceTask全貌·2.6Phase6實體層優化器·2.6.1MapJoin原理·2.6.2CommonJoinResolver優化器·2.6.3MapJoinResolver優化器·3、HiveSQL編譯過程的設計·4、社區發展方向·5、參考Hive是基於Hadoop的一個資料倉庫系統,在各大

4、公司都有廣泛的應用。美團資料倉庫也是基於Hive搭建,每天執行近萬次的HiveETL計算流程,負責每天數百GB的資料存儲和分析。Hive的穩定性和性能對我們的資料分析非常關鍵。在幾次升級Hive的過程中,我們遇到了一些大大小小的問題。通過向社區的諮詢和自己的努力,在解決這些問題的同時我們對Hive將SQL編譯為MapReduce的過程有了比較深入的理解。對這一過程的理解不僅幫助我們解決了一些Hive的bug,也有利於我們優化HiveSQL,提升我們對Hive的掌控力,同時有能力去定制一些需要的功能。1、MapReduce實現基本SQL操作的原理詳細講解SQL編譯為MapR

5、educe之前,我們先來看看MapReduce框架實現SQL基本操作的原理1.1Join的實現原理selectu.name,o.orderidfromorderojoinuseruono.uid=u.uid;在map的輸出value中為不同表的資料打上tag標記,在reduce階段根據tag判斷資料來源。MapReduce的過程如下(這裡只是說明最基本的Join的實現,還有其他的實現方式)1.2GroupBy的實現原理selectrank,isonline,count(*)fromcitygroupbyrank,isonline;將GroupBy的欄位組合為map的輸出k

6、ey值,利用MapReduce的排序,在reduce階段保存LastKey區分不同的key。MapReduce的過程如下(當然這裡只是說明Reduce端的非Hash聚合過程)1.3Distinct的實現原理selectdealid,count(distinctuid)numfromordergroupbydealid;當只有一個distinct欄位時,如果不考慮Map階段的HashGroupBy,只需要將GroupBy欄位和Distinct欄位組合為map輸出key,利用mapreduce的排序,同時將GroupBy欄位作為reduce的key,在reduce階段保存La

7、stKey即可完成去重如果有多個distinct欄位呢,如下面的SQLselectdealid,count(distinctuid),count(distinctdate)fromordergroupbydealid;實現方式有兩種:(1)如果仍然按照上面一個distinct欄位的方法,即下圖這種實現方式,無法跟據uid和date分別排序,也就無法通過LastKey去重,仍然需要在reduce階段在記憶體中通過Hash去重(2)第二種實現方式,可以對所有的distinct欄位編號,每行資料生成n行資料,那麼相同欄位就會分別排序

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。