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

  1. 1、本文档共42页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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

文档评论(0)

xxj1658888 + 关注
实名认证
内容提供者

教师资格证持证人

该用户很懒,什么也没介绍

领域认证该用户于2024年04月12日上传了教师资格证

1亿VIP精品文档

相关文档