日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Hive SQL底層執行過程詳細剖析

來源: 責編: 時間:2024-05-16 17:44:56 198觀看
導讀HiveHive是什么?Hive 是數據倉庫工具,再具體點就是一個 SQL 解析引擎,因為它即不負責存儲數據,也不負責計算數據,只負責解析 SQL,記錄元數據。Hive直接訪問存儲在 HDFS 中或者 HBase 中的文件,通過 MapReduce、Spark 或 Tez

Hive

Hive是什么?Hive 是數據倉庫工具,再具體點就是一個 SQL 解析引擎,因為它即不負責存儲數據,也不負責計算數據,只負責解析 SQL,記錄元數據。l5p28資訊網——每日最新資訊28at.com

Hive直接訪問存儲在 HDFS 中或者 HBase 中的文件,通過 MapReduce、Spark 或 Tez 執行查詢。l5p28資訊網——每日最新資訊28at.com

我們今天來聊的就是 Hive 底層是怎樣將我們寫的 SQL 轉化為 MapReduce 等計算引擎可識別的程序。了解 Hive SQL 的底層編譯過程有利于我們優化Hive SQL,提升我們對Hive的掌控力,同時有能力去定制一些需要的功能。l5p28資訊網——每日最新資訊28at.com

Hive 底層執行架構

我們先來看下 Hive 的底層執行架構圖, Hive 的主要組件與 Hadoop 交互的過程:l5p28資訊網——每日最新資訊28at.com

Hive底層執行架構Hive底層執行架構l5p28資訊網——每日最新資訊28at.com

在 Hive 這一側,總共有五個組件:l5p28資訊網——每日最新資訊28at.com

  1. UI:用戶界面??煽醋魑覀兲峤籗QL語句的命令行界面。
  2. DRIVER:驅動程序。接收查詢的組件。該組件實現了會話句柄的概念。
  3. COMPILER:編譯器。負責將 SQL 轉化為平臺可執行的執行計劃。對不同的查詢塊和查詢表達式進行語義分析,并最終借助表和從 metastore 查找的分區元數據來生成執行計劃。
  4. METASTORE:元數據庫。存儲 Hive 中各種表和分區的所有結構信息。
  5. EXECUTION ENGINE:執行引擎。負責提交 COMPILER 階段編譯好的執行計劃到不同的平臺上。

上圖的基本流程是:l5p28資訊網——每日最新資訊28at.com

步驟1:UI 調用 DRIVER 的接口;l5p28資訊網——每日最新資訊28at.com

步驟2:DRIVER 為查詢創建會話句柄,并將查詢發送到 COMPILER(編譯器)生成執行計劃;l5p28資訊網——每日最新資訊28at.com

步驟3和4:編譯器從元數據存儲中獲取本次查詢所需要的元數據,該元數據用于對查詢樹中的表達式進行類型檢查,以及基于查詢謂詞修建分區;l5p28資訊網——每日最新資訊28at.com

步驟5:編譯器生成的計劃是分階段的DAG,每個階段要么是 map/reduce 作業,要么是一個元數據或者HDFS上的操作。將生成的計劃發給 DRIVER。l5p28資訊網——每日最新資訊28at.com

如果是 map/reduce 作業,該計劃包括 map operator trees 和一個  reduce operator tree,執行引擎將會把這些作業發送給 MapReduce :l5p28資訊網——每日最新資訊28at.com

步驟6、6.1、6.2和6.3:執行引擎將這些階段提交給適當的組件。在每個 task(mapper/reducer) 中,從HDFS文件中讀取與表或中間輸出相關聯的數據,并通過相關算子樹傳遞這些數據。最終這些數據通過序列化器寫入到一個臨時HDFS文件中(如果不需要 reduce 階段,則在 map 中操作)。臨時文件用于向計劃中后面的 map/reduce 階段提供數據。l5p28資訊網——每日最新資訊28at.com

步驟7、8和9:最終的臨時文件將移動到表的位置,確保不讀取臟數據(文件重命名在HDFS中是原子操作)。對于用戶的查詢,臨時文件的內容由執行引擎直接從HDFS讀取,然后通過Driver發送到UI。l5p28資訊網——每日最新資訊28at.com

Hive SQL 編譯成 MapReduce 過程

編譯 SQL 的任務是在上節中介紹的 COMPILER(編譯器組件)中完成的。Hive將SQL轉化為MapReduce任務,整個編譯過程分為六個階段:l5p28資訊網——每日最新資訊28at.com

Hive SQL編譯過程Hive SQL編譯過程l5p28資訊網——每日最新資訊28at.com

  1. 詞法、語法解析: Antlr 定義 SQL 的語法規則,完成 SQL 詞法,語法解析,將 SQL 轉化為抽象語法樹 AST Tree;

Antlr是一種語言識別的工具,可以用來構造領域語言。使用Antlr構造特定的語言只需要編寫一個語法文件,定義詞法和語法替換規則即可,Antlr完成了詞法分析、語法分析、語義分析、中間代碼生成的過程。l5p28資訊網——每日最新資訊28at.com

  1. 語義解析: 遍歷 AST Tree,抽象出查詢的基本組成單元 QueryBlock;
  2. 生成邏輯執行計劃: 遍歷 QueryBlock,翻譯為執行操作樹 OperatorTree;
  3. 優化邏輯執行計劃: 邏輯層優化器進行 OperatorTree 變換,合并 Operator,達到減少 MapReduce Job,減少數據傳輸及 shuffle 數據量;
  4. 生成物理執行計劃: 遍歷 OperatorTree,翻譯為 MapReduce 任務;
  5. 優化物理執行計劃: 物理層優化器進行 MapReduce 任務的變換,生成最終的執行計劃。
下面對這六個階段詳細解析:

為便于理解,我們拿一個簡單的查詢語句進行展示,對5月23號的地區維表進行查詢:l5p28資訊網——每日最新資訊28at.com

select * from dim.dim_region where dt = '2021-05-23';

階段一:詞法、語法解析l5p28資訊網——每日最新資訊28at.com

根據Antlr定義的sql語法規則,將相關sql進行詞法、語法解析,轉化為抽象語法樹AST Tree:l5p28資訊網——每日最新資訊28at.com

ABSTRACT SYNTAX TREE:TOK_QUERY    TOK_FROM     TOK_TABREF           TOK_TABNAME               dim                 dim_region    TOK_INSERT      TOK_DESTINATION          TOK_DIR              TOK_TMP_FILE        TOK_SELECT          TOK_SELEXPR              TOK_ALLCOLREF        TOK_WHERE          =              TOK_TABLE_OR_COL                  dt                    '2021-05-23'

階段二:語義解析l5p28資訊網——每日最新資訊28at.com

遍歷AST Tree,抽象出查詢的基本組成單元QueryBlock:l5p28資訊網——每日最新資訊28at.com

AST Tree生成后由于其復雜度依舊較高,不便于翻譯為mapreduce程序,需要進行進一步抽象和結構化,形成QueryBlock。l5p28資訊網——每日最新資訊28at.com

QueryBlock是一條SQL最基本的組成單元,包括三個部分:輸入源,計算過程,輸出。簡單來講一個QueryBlock就是一個子查詢。l5p28資訊網——每日最新資訊28at.com

QueryBlock的生成過程為一個遞歸過程,先序遍歷 AST Tree ,遇到不同的 Token 節點(理解為特殊標記),保存到相應的屬性中。l5p28資訊網——每日最新資訊28at.com

階段三:生成邏輯執行計劃l5p28資訊網——每日最新資訊28at.com

遍歷QueryBlock,翻譯為執行操作樹OperatorTree:l5p28資訊網——每日最新資訊28at.com

Hive最終生成的MapReduce任務,Map階段和Reduce階段均由OperatorTree組成。l5p28資訊網——每日最新資訊28at.com

基本的操作符包括:l5p28資訊網——每日最新資訊28at.com

  • TableScanOperator
  • SelectOperator
  • FilterOperator
  • JoinOperator
  • GroupByOperator
  • ReduceSinkOperator`

Operator在Map Reduce階段之間的數據傳遞都是一個流式的過程。每一個Operator對一行數據完成操作后之后將數據傳遞給childOperator計算。l5p28資訊網——每日最新資訊28at.com

由于Join/GroupBy/OrderBy均需要在Reduce階段完成,所以在生成相應操作的Operator之前都會先生成一個ReduceSinkOperator,將字段組合并序列化為Reduce Key/value, Partition Key。l5p28資訊網——每日最新資訊28at.com

階段四:優化邏輯執行計劃l5p28資訊網——每日最新資訊28at.com

Hive中的邏輯查詢優化可以大致分為以下幾類:l5p28資訊網——每日最新資訊28at.com

  • 投影修剪
  • 推導傳遞謂詞
  • 謂詞下推
  • 將Select-Select,Filter-Filter合并為單個操作
  • 多路 Join
  • 查詢重寫以適應某些列值的Join傾斜

階段五:生成物理執行計劃l5p28資訊網——每日最新資訊28at.com

生成物理執行計劃即是將邏輯執行計劃生成的OperatorTree轉化為MapReduce Job的過程,主要分為下面幾個階段:l5p28資訊網——每日最新資訊28at.com

  1. 對輸出表生成MoveTask
  2. 從OperatorTree的其中一個根節點向下深度優先遍歷
  3. ReduceSinkOperator標示Map/Reduce的界限,多個Job間的界限
  4. 遍歷其他根節點,遇過碰到JoinOperator合并MapReduceTask
  5. 生成StatTask更新元數據
  6. 剪斷Map與Reduce間的Operator的關系

階段六:優化物理執行計劃l5p28資訊網——每日最新資訊28at.com

Hive中的物理優化可以大致分為以下幾類:l5p28資訊網——每日最新資訊28at.com

  • 分區修剪(Partition Pruning)
  • 基于分區和桶的掃描修剪(Scan pruning)
  • 如果查詢基于抽樣,則掃描修剪
  • 在某些情況下,在 map 端應用 Group By
  • 在 mapper 上執行 Join
  • 優化 Union,使Union只在 map 端執行
  • 在多路 Join 中,根據用戶提示決定最后流哪個表
  • 刪除不必要的 ReduceSinkOperators
  • 對于帶有Limit子句的查詢,減少需要為該表掃描的文件數
  • 對于帶有Limit子句的查詢,通過限制 ReduceSinkOperator 生成的內容來限制來自 mapper 的輸出
  • 減少用戶提交的SQL查詢所需的Tez作業數量
  • 如果是簡單的提取查詢,避免使用MapReduce作業
  • 對于帶有聚合的簡單獲取查詢,執行不帶 MapReduce 任務的聚合
  • 重寫 Group By 查詢使用索引表代替原來的表
  • 當表掃描之上的謂詞是相等謂詞且謂詞中的列具有索引時,使用索引掃描

經過以上六個階段,SQL 就被解析映射成了集群上的 MapReduce 任務。l5p28資訊網——每日最新資訊28at.com

SQL編譯成MapReduce具體原理

在階段五-生成物理執行計劃,即遍歷 OperatorTree,翻譯為 MapReduce 任務,這個過程具體是怎么轉化的呢l5p28資訊網——每日最新資訊28at.com

我們接下來舉幾個常用 SQL 語句轉化為 MapReduce 的具體步驟:l5p28資訊網——每日最新資訊28at.com

Join的實現原理

以下面這個SQL為例,講解 join 的實現:l5p28資訊網——每日最新資訊28at.com

select u.name, o.orderid from order o join user u on o.uid = u.uid;

在map的輸出value中為不同表的數據打上tag標記,在reduce階段根據tag判斷數據來源。MapReduce的過程如下:l5p28資訊網——每日最新資訊28at.com

MapReduce CommonJoin的實現MapReduce CommonJoin的實現l5p28資訊網——每日最新資訊28at.com

Group By的實現原理

以下面這個SQL為例,講解 group by 的實現:l5p28資訊網——每日最新資訊28at.com

select rank, isonline, count(*) from city group by rank, isonline;

將GroupBy的字段組合為map的輸出key值,利用MapReduce的排序,在reduce階段保存LastKey區分不同的key。MapReduce的過程如下:l5p28資訊網——每日最新資訊28at.com

MapReduce Group By的實現MapReduce Group By的實現l5p28資訊網——每日最新資訊28at.com

Distinct的實現原理

以下面這個SQL為例,講解 distinct 的實現:l5p28資訊網——每日最新資訊28at.com

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即可完成去重:l5p28資訊網——每日最新資訊28at.com

MapReduce Distinct的實現MapReduce Distinct的實現l5p28資訊網——每日最新資訊28at.com


l5p28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-88575-0.htmlHive SQL底層執行過程詳細剖析

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 不一樣的SVG!SVG在CSS背景平鋪中的應用

下一篇: Span 在網絡編程中可以提供高性能的內存訪問和數據處理能力

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
在线观看成人小视频| 国产精品亚洲不卡a| 久久久噜噜噜久久中文字免| 久久久久国产成人精品亚洲午夜| 久久只有精品| 欧美日产在线观看| 国产日韩欧美中文| 亚洲国产精品高清久久久| 亚洲激情一区二区三区| 一区二区三区高清在线观看| 欧美一级专区| 欧美国产一区视频在线观看 | 欧美区高清在线| 国产精品午夜久久| 在线观看日韩| 亚洲影院免费观看| 噜噜噜在线观看免费视频日韩| 欧美三级视频在线| 国语自产精品视频在线看一大j8| 亚洲美女诱惑| 久久国产精品黑丝| 欧美四级在线| 悠悠资源网亚洲青| 亚洲自拍电影| 欧美电影免费网站| 国产亚洲欧美日韩在线一区 | 奶水喷射视频一区| 国产精品丝袜久久久久久app| 在线日韩中文字幕| 香蕉av777xxx色综合一区| 欧美黑人多人双交| 黄色亚洲在线| 亚洲免费在线| 欧美日韩国产综合久久| 在线看欧美视频| 欧美一区二区三区另类| 欧美视频亚洲视频| 亚洲国产精品一区二区久| 欧美综合国产| 国产精品99免费看 | 久久一区二区三区超碰国产精品| 国产精品高潮呻吟久久av黑人| 亚洲激情av在线| 久久久久国产精品一区| 国产精品视频自拍| 一本一道久久综合狠狠老精东影业 | 亚洲精品在线一区二区| 久久久爽爽爽美女图片| 国产伦精品一区二区三区视频孕妇 | 日韩视频在线你懂得| 久久夜色精品国产欧美乱极品| 国产欧美亚洲精品| 亚洲欧美日本日韩| 国产精品jvid在线观看蜜臀 | 久久性色av| 国产日韩一区二区| 亚洲欧美国产日韩天堂区| 欧美色欧美亚洲高清在线视频| 亚洲经典一区| 老司机成人在线视频| 国内精品伊人久久久久av一坑| 小嫩嫩精品导航| 国产精品一区二区三区免费观看| 亚洲一区二区三区影院| 国产精品国产三级国产普通话蜜臀| 夜夜嗨av色一区二区不卡| 欧美精品国产一区二区| 亚洲欧洲一区二区天堂久久| 麻豆av一区二区三区久久| 在线观看欧美一区| 美日韩精品免费| 在线观看三级视频欧美| 久久深夜福利免费观看| 影音先锋欧美精品| 久久亚洲一区二区| 一区二区三区在线免费播放| 久久综合久久综合久久| 亚洲福利国产精品| 免费视频一区| 亚洲黄页一区| 欧美另类视频| 中文有码久久| 国产精品免费看片| 欧美一级二级三级蜜桃| 国产视频亚洲精品| 久久视频在线免费观看| 18成人免费观看视频| 欧美91大片| 亚洲毛片一区二区| 欧美视频一区二区三区在线观看 | 久久国产精品久久久久久电车| 国产一区视频网站| 麻豆精品91| 亚洲麻豆国产自偷在线| 欧美视频一区在线| 欧美亚洲网站| 一区二区在线视频播放| 欧美高清免费| 99精品视频免费全部在线| 欧美午夜一区| 欧美一区二区三区播放老司机| 韩国一区电影| 欧美va天堂在线| 一本色道久久综合亚洲精品高清 | 亚洲免费在线视频一区 二区| 国产欧美在线视频| 久久综合狠狠| 日韩亚洲国产欧美| 国产精品视频一区二区三区| 久久久久久久成人| 亚洲国产精品久久久久婷婷老年| 欧美理论在线播放| 亚洲一区亚洲| 狠狠综合久久av一区二区小说 | 奶水喷射视频一区| 一本一本久久| 国产视频精品免费播放| 蜜臀久久99精品久久久画质超高清| 欧美+日本+国产+在线a∨观看| 亚洲精品国产精品国自产观看浪潮 | 在线国产亚洲欧美| 欧美色网在线| 久久九九国产精品| 亚洲美洲欧洲综合国产一区| 国产欧美精品xxxx另类| 欧美bbbxxxxx| 午夜精品久久久久久久蜜桃app| 影音先锋国产精品| 国产精品电影网站| 久久精品一区二区三区中文字幕 | 久久久久国产精品人| 99re视频这里只有精品| 国产一区二区久久| 欧美另类一区二区三区| 欧美一区二区视频免费观看 | 欧美综合国产| 亚洲最新视频在线| 一区二区视频在线观看| 欧美视频一区二区在线观看| 久久婷婷激情| 亚洲影院在线| 亚洲精品美女久久久久| 国产亚洲欧美中文| 欧美日韩免费在线观看| 久久综合九色综合久99| 午夜老司机精品| 一本色道久久综合| 在线观看亚洲精品| 国产九区一区在线| 欧美日韩国产精品专区| 久久婷婷国产麻豆91天堂| 亚洲欧美999| 日韩视频欧美视频| 在线欧美亚洲| 国产亚洲二区| 国产精品女主播在线观看| 欧美精品一区二区三区在线看午夜 | 亚洲素人在线| 最新高清无码专区| 好吊色欧美一区二区三区四区| 欧美午夜不卡在线观看免费| 欧美freesex交免费视频| 久久激情网站| 午夜精品久久| 亚洲一二三四区| 日韩一二三区视频| 亚洲国产精品毛片| 精品成人一区二区| 国产真实久久| 国产欧美精品一区二区色综合| 欧美午夜久久久| 欧美日韩视频在线一区二区| 欧美福利一区二区| 免费观看国产成人| 久久人人九九| 久久国产精品久久精品国产| 欧美一级淫片播放口| 亚洲嫩草精品久久| 亚洲午夜三级在线| 一区二区高清视频| 99精品国产热久久91蜜凸| 亚洲国产精品成人| 在线不卡中文字幕播放| 韩国三级电影久久久久久| 国产一区在线免费观看| 国产午夜精品麻豆| 国产欧美一区二区精品忘忧草| 国产精品久久二区二区| 国产精品扒开腿做爽爽爽软件| 欧美日韩国产美女| 欧美日韩成人综合| 欧美日韩另类字幕中文| 欧美日韩国产在线观看| 欧美日韩精品免费观看视频| 欧美日韩和欧美的一区二区| 欧美日本免费| 欧美日韩免费精品| 欧美天堂亚洲电影院在线观看| 欧美日韩在线一区| 国产精品www网站| 国产精品毛片va一区二区三区| 国产精品福利在线| 国产伦理精品不卡| 国内精品视频在线播放|