- 1、本文档共42页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Hive SQL 編譯過程詳解
目錄[-]
? 1、MapReduce實現基本SQL操作的原理
? 1.1 Join的實現原理
? 1.2 Group By的實現原理
? 1.3 Distinct的實現原理
? 2、SQL轉化為MapReduce的過程
? 2.1 Phase1 SQL詞法,語法解析
? 2.1.1 Antlr
? 2.1.2 抽象語法樹AST Tree
? 2.1.3 樣例SQL
? 2.1.3 SQL生成AST Tree
? 2.2 Phase2 SQL基本組成單元QueryBlock
? 2.2.1 QueryBlock
? 2.2.2 AST Tree生成QueryBlock
? 2.3 Phase3 邏輯操作符Operator
? 2.3.1 Operator
? 2.3.2 QueryBlock生成Operator Tree
? 2.4 Phase4 邏輯層優化器
? 2.4.1 PredicatePushDown優化器
? 2.4.2 NonBlockingOpDeDupProc優化器
? 2.4.3 ReduceSinkDeDuplication優化器
? 2.5 Phase5 OperatorTree生成MapReduce Job的過程
? 2.5.1 對輸出表生成MoveTask
? 2.5.2 開始遍歷
? 2.5.3 Rule #1 TS% 生成MapReduceTask物件,確定MapWork
? 2.5.4 Rule #2 TS%.*RS% 確定ReduceWork
? 2.5.5 Rule #3 RS%.*RS% 生成新MapReduceTask物件,切分MapReduceTask
? 2.5.6 R4 FS% 連接MapReduceTask與MoveTask
? 2.5.7 合併Stage
? 2.5.8 切分Map Reduce階段
? 2.5.9 OperatorTree生成MapReduceTask全貌
? 2.6 Phase6 實體層優化器
? 2.6.1 MapJoin原理
? 2.6.2 CommonJoinResolver優化器
? 2.6.3 MapJoinResolver優化器
? 3、Hive SQL編譯過程的設計
? 4、社區發展方向
? 5、參考
Hive是基於Hadoop的一個資料倉庫系統,在各大公司都有廣泛的應用。美團資料倉庫也是基於Hive搭建,每天執行近萬次的Hive ETL計算流程,負責每天數百GB的資料存儲和分析。Hive的穩定性和性能對我們的資料分析非常關鍵。
在幾次升級Hive的過程中,我們遇到了一些大大小小的問題。通過向社區的諮詢和自己的努力,在解決這些問題的同時我們對Hive將SQL編譯為MapReduce的過程有了比較深入的理解。對這一過程的理解不僅幫助我們解決了一些Hive的bug,也有利於我們優化Hive SQL,提升我們對Hive的掌控力,同時有能力去定制一些需要的功能。
1、MapReduce實現基本SQL操作的原理
詳細講解SQL編譯為MapReduce之前,我們先來看看MapReduce框架實現SQL基本操作的原理
1.1 Join的實現原理
select , o.orderid from order o join user u on o.uid = u.uid;
在map的輸出value中為不同表的資料打上tag標記,在reduce階段根據tag判斷資料來源。MapReduce的過程如下(這裡只是說明最基本的Join的實現,還有其他的實現方式)
1.2 Group By的實現原理
select rank, isonline, count(*) from city group by rank, isonline;
將GroupBy的欄位組合為map的輸出key值,利用MapReduce的排序,在reduce階段保存LastKey區分不同的key。MapReduce的過程如下(當然這裡只是說明Reduce端的非Hash聚合過程)
1.3 Distinct的實現原理
select dealid, count(distinct uid) num from order group by dealid;
當只有一個distinct欄位時,如果不考慮Map階段的Hash GroupBy,只需要將GroupBy欄位和Distinct欄位組合為map輸出key,利用mapreduce的排序,同時將GroupBy欄位作為reduce的key,在reduce階段保存LastKey即可完成去重
如果有多個distinct欄位呢,如下面的SQL
sel
您可能关注的文档
- 018 德福强化03.pdf
- 00Cr13Ni6MoNb马氏体时效不锈钢中的_转变.pdf
- 高速铁路声屏障脉冲动力计算分析与新型预应力混凝土声屏障结构的研究.pdf
- 高速电路信号完整性测试,分析和验证.pdf
- 11初三复习教学案—物质运动.doc
- 13 Accurate Electrical Battery Model Capable of Predicting Runtime and I–V Performance.pdf
- 13秋《计算机基础》作业2.doc
- 1.生活中的信息.ppt
- 19 840-842 工艺技术 3 高效提取啤酒酵母中B族维生素的研究.pdf
- 2.1域名及域名管理.ppt
文档评论(0)