【為什么要了解hive執行流程】
- .當我們寫了一個sql,但是執行起來很慢,這時如果我們知道這個sql的底層執行流程是怎樣的,就會比較容易去優化
- .如果我們在面試中被問及對hive的理解,如果說就是寫sql會顯得很片面,如果我們了解hive的執行流程,就會知道,雖然表面上是寫sql,但是在從hive的sql,到最終出來執行結果,中間經歷了MR流程,其中MR的map,combiner,shuffle,reduce具體是執行了hive的那個部分,這樣就會比較全面。
【分析基於hadoop之上的SQL執行流程】
-
基本SQL框架
【例表:traffic_info】
NAME | ID | TRAFFIC |
YY | 1001 | 204 |
【例表:TV_info】
ID | BOSS |
1001 | 若老 |
- select name,count(1) from traffic_info group by name;
- select a.name,a.id,a.traffic,b.boss from traffic_info a join TV_info b on a.id=b.id
- 解析:這兩個簡單的sql基本上涵蓋了所有的大數據sql的框架,也就是說無論多磨復雜的大數據sql最終都會落到這兩個簡單的sql框架上,基本上不會有第三種,之所以我們會覺得sql千變萬化,非常復雜,基本上都是業務的復雜度的原因
【圖解sql執行流程】
- sql寫出來以后只是一些字符串的拼接,所以要經過一系列的解析處理,才能最終變成集群上的執行的作業
- Parser:將sql解析為AST(抽象語法樹),會進行語法校驗,AST本質還是字符串
- Analyzer:語法解析,生成QB(query block)
- Logicl Plan:邏輯執行計划解析,生成一堆Opertator Tree
- Logical optimizer:進行邏輯執行計划優化,生成一堆優化后的Opertator Tree
- Phsical plan:物理執行計划解析,生成tasktree
- Phsical Optimizer:進行物理執行計划優化,生成優化后的tasktree,該任務即是集群上的執行的作業
- 結論:經過以上的六步,普通的字符串sql被解析映射成了集群上的執行任務,最重要的兩步是 邏輯執行計划優化和物理執行計划優化(圖中紅線圈畫)
【SQL與MR流程之間的關系】
- 1.過濾類SQL與MR的關系
- 執行sql:select a.id,a,city, a.cate form access a where a.day=’20190414’ and a.cate= ‘大奔’
- 結論:過濾類的sql相當於ETL的數據清洗過程,並沒有reduce過程,分區的過濾在讀取數據的時候就已經進行了。map的個數是由分片數決定的。
- 聚合分組類SQL與MR的關系
- select city, count(1) form access a where a.day=’20190414’ and a.cate= ‘奔馳’ group by city
結論:
- .其實這個過成和WC是非常相似的,在各自的分片中,都是把數據分割以后每個值都對應一個1得到<key,1>,再經過本地reduce(combine過程)把key一樣的value=1相加,得到新的<key,values>,再經過shuffle過程,把所有分片中的<key,values>,key一致的values相加,又得到最終的<key,values>。
- combiner其實是一個本地的reduce主要就是為了減輕reduce的負擔,但並不是所有的場景都會發生combiner,例如求平均數。
【知識擴展】
- 擴展1:reducebykey和groupbykey的區別,前者會發生combiner 局部聚合,而后者不會,前者獲得的是相同key對應的一個元素,后者是獲取元素集合。reducebykey更加適合大數據,少用groupbykey(全數據shuffle)
- 擴展2:map task數是由數據文件分片數決定的分片數即是map任務數,程序員只能給個期望值
- 擴展3:reduce task數是由輸入reduce的數據的分區(partitions)數決定的即分區數為map任務數,默認是1,程序員可直接設置reduce個數來改變reduce task數,reduce task數決定來 生成的文件數。
- 擴展4: MR數據shuffle確定數據發往哪一個reduce分區的規則是:取key的hashcode值對分區數模。
- 擴展5:explain sql ;查看某sql語句的執行計划
【知識拓展來自以下博客】
作者:qq_32641659
來源:CSDN
原文:https://blog.csdn.net/qq_32641659/article/details/89421655
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
官網:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Explain