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

1、Hive 執行過程概述app

一、概述

(1) Hive 將 HQL 轉換成一組操做符(Operator),好比 GroupByOperator, JoinOperator 等優化

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

(3)每一個操做符表明一個 HDFS 操做或者 MapReduce 做業3d

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

二、Hive 操做符列表

三、Hive 編譯器的工做職責

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

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

(3)Logic Plan Generator:將查詢塊轉換成邏輯查詢計劃編譯器

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

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

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

四、優化器類型

上表中帶①符號的,優化目的都是儘可能將任務合併到一個 Job 中,以減小 Job 數量,帶②的 優化目的是儘可能減小 shuffle 數據量

2、join

一、對於 join 操做

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

二、實現過程

 Map

  一、以 JOIN ON 條件中的列做爲 Key,若是有多個列,則 Key 是這些列的組合

  二、以 JOIN 以後所關心的列做爲 Value,當有多個列時,Value 是這些列的組合。在 Value 中還會包含表的 Tag 信息,用於標明此 Value 對應於哪一個表

  三、按照 Key 進行排序

Shuffle

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

Reduce

  一、 Reducer 根據 Key 值進行 Join 操做,而且經過 Tag 來識別不一樣的表中的數據

三、具體實現過程

3、Group By

一、對於 group by操做

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

二、實現過程

4、Distinct

一、對於 distinct的操做

按照 age 分組,而後統計每一個分組裏面的不重複的 pageid 有多少個

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

二、實現過程

三、詳細過程解釋

該 SQL 語句會按照 age 和 pageid 預先分組,進行 distinct 操做。而後會再按 照 age 進行分組,再進行一次 distinct 操做

相關文章
相關標籤/搜索