Hive(九)Hive 執行過程實例分析


一、Hive 執行過程概述

1、概述

(1) Hive 將 HQL 轉換成一組操作符(Operator),比如 GroupByOperator, JoinOperator 等

(2)操作符 Operator 是 Hive 的最小處理單元

(3)每個操作符代表一個 HDFS 操作或者 MapReduce 作業

(4)Hive 通過 ExecMapper 和 ExecReducer 執行 MapReduce 程序,執行模式有本地模式和分 布式兩種模式

2、Hive 操作符列表

3、Hive 編譯器的工作職責

(1)Parser:將 HQL 語句轉換成抽象語法樹(AST:Abstract Syntax Tree)

(2)Semantic Analyzer:將抽象語法樹轉換成查詢塊

(3)Logic Plan Generator:將查詢塊轉換成邏輯查詢計划

(4)Logic Optimizer:重寫邏輯查詢計划,優化邏輯執行計划

(5)Physical Plan Gernerator:將邏輯計划轉化成物理計划(MapReduce Jobs)

(6)Physical Optimizer:選擇最佳的 Join 策略,優化物理執行計划

4、優化器類型

上表中帶①符號的,優化目的都是盡量將任務合並到一個 Job 中,以減少 Job 數量,帶②的 優化目的是盡量減少 shuffle 數據量

二、join

1、對於 join 操作

SELECT pv.pageid, u.age FROM page_view pv JOIN user u ON pv.userid = u.userid;

2、實現過程

 Map

  1、以 JOIN ON 條件中的列作為 Key,如果有多個列,則 Key 是這些列的組合

  2、以 JOIN 之后所關心的列作為 Value,當有多個列時,Value 是這些列的組合。在 Value 中還會包含表的 Tag 信息,用於標明此 Value 對應於哪個表

  3、按照 Key 進行排序

Shuffle

  1、根據 Key 的值進行 Hash,並將 Key/Value 對按照 Hash 值推至不同對 Reduce 中

Reduce

  1、 Reducer 根據 Key 值進行 Join 操作,並且通過 Tag 來識別不同的表中的數據

3、具體實現過程

三、Group By

1、對於 group by操作

SELECT pageid, age, count(1) FROM pv_users GROUP BY pageid, age; 

2、實現過程

四、Distinct

1、對於 distinct的操作

按照 age 分組,然后統計每個分組里面的不重復的 pageid 有多少個

SELECT age, count(distinct pageid) FROM pv_users GROUP BY age;

2、實現過程

3、詳細過程解釋

該 SQL 語句會按照 age 和 pageid 預先分組,進行 distinct 操作。然后會再按 照 age 進行分組,再進行一次 distinct 操作


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM