日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Hive SQL的执行流程

發(fā)布時間:2024/8/26 综合教程 41 生活家
生活随笔 收集整理的這篇文章主要介紹了 Hive SQL的执行流程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

【為什么要了解hive執(zhí)行流程】

.當(dāng)我們寫了一個sql,但是執(zhí)行起來很慢,這時如果我們知道這個sql的底層執(zhí)行流程是怎樣的,就會比較容易去優(yōu)化
.如果我們在面試中被問及對hive的理解,如果說就是寫sql會顯得很片面,如果我們了解hive的執(zhí)行流程,就會知道,雖然表面上是寫sql,但是在從hive的sql,到最終出來執(zhí)行結(jié)果,中間經(jīng)歷了MR流程,其中MR的map,combiner,shuffle,reduce具體是執(zhí)行了hive的那個部分,這樣就會比較全面。

【分析基于hadoop之上的SQL執(zhí)行流程】

基本SQL框架

【例表:traffic_info】

NAME ID TRAFFIC
YY 1001 204

【例表:TV_info】

ID BOSS
1001 若老

select name,count(1) fromtraffic_info group by name;
select a.name,a.id,a.traffic,b.boss fromtraffic_info a joinTV_info b on a.id=b.id

解析:這兩個簡單的sql基本上涵蓋了所有的大數(shù)據(jù)sql的框架,也就是說無論多磨復(fù)雜的大數(shù)據(jù)sql最終都會落到這兩個簡單的sql框架上,基本上不會有第三種,之所以我們會覺得sql千變?nèi)f化,非常復(fù)雜,基本上都是業(yè)務(wù)的復(fù)雜度的原因

【圖解sql執(zhí)行流程】

sql寫出來以后只是一些字符串的拼接,所以要經(jīng)過一系列的解析處理,才能最終變成集群上的執(zhí)行的作業(yè)

Parser:將sql解析為AST(抽象語法樹),會進(jìn)行語法校驗,AST本質(zhì)還是字符串
Analyzer:語法解析,生成QB(query block)
Logicl Plan:邏輯執(zhí)行計劃解析,生成一堆Opertator Tree
Logical optimizer:進(jìn)行邏輯執(zhí)行計劃優(yōu)化,生成一堆優(yōu)化后的Opertator Tree
Phsical plan:物理執(zhí)行計劃解析,生成tasktree
Phsical Optimizer:進(jìn)行物理執(zhí)行計劃優(yōu)化,生成優(yōu)化后的tasktree,該任務(wù)即是集群上的執(zhí)行的作業(yè)

結(jié)論:經(jīng)過以上的六步,普通的字符串sql被解析映射成了集群上的執(zhí)行任務(wù),最重要的兩步是邏輯執(zhí)行計劃優(yōu)化和物理執(zhí)行計劃優(yōu)化(圖中紅線圈畫)

【SQL與MR流程之間的關(guān)系】

1.過濾類SQL與MR的關(guān)系
執(zhí)行sql:selecta.id,a,city, a.cate form access a where a.day=’20190414’ and a.cate= ‘大奔’

結(jié)論:過濾類的sql相當(dāng)于ETL的數(shù)據(jù)清洗過程,并沒有reduce過程,分區(qū)的過濾在讀取數(shù)據(jù)的時候就已經(jīng)進(jìn)行了。map的個數(shù)是由分片數(shù)決定的。

聚合分組類SQL與MR的關(guān)系
select city, count(1) form access a where a.day=’20190414’ and a.cate= ‘奔馳’ group by city
結(jié)論:

.其實這個過成和WC是非常相似的,在各自的分片中,都是把數(shù)據(jù)分割以后每個值都對應(yīng)一個1得到<key,1>,再經(jīng)過本地reduce(combine過程)把key一樣的value=1相加,得到新的<key,values>,再經(jīng)過shuffle過程,把所有分片中的<key,values>,key一致的values相加,又得到最終的<key,values>。
combiner其實是一個本地的reduce主要就是為了減輕reduce的負(fù)擔(dān),但并不是所有的場景都會發(fā)生combiner,例如求平均數(shù)。

【知識擴(kuò)展】

擴(kuò)展1:reducebykey和groupbykey的區(qū)別,前者會發(fā)生combiner 局部聚合,而后者不會,前者獲得的是相同key對應(yīng)的一個元素,后者是獲取元素集合。reducebykey更加適合大數(shù)據(jù),少用groupbykey(全數(shù)據(jù)shuffle)
擴(kuò)展2:map task數(shù)是由數(shù)據(jù)文件分片數(shù)決定的分片數(shù)即是map任務(wù)數(shù),程序員只能給個期望值
擴(kuò)展3:reduce task數(shù)是由輸入reduce的數(shù)據(jù)的分區(qū)(partitions)數(shù)決定的即分區(qū)數(shù)為map任務(wù)數(shù),默認(rèn)是1,程序員可直接設(shè)置reduce個數(shù)來改變reduce task數(shù),reduce task數(shù)決定來 生成的文件數(shù)。
擴(kuò)展4: MR數(shù)據(jù)shuffle確定數(shù)據(jù)發(fā)往哪一個reduce分區(qū)的規(guī)則是:取key的hashcode值對分區(qū)數(shù)模。
擴(kuò)展5:explain sql ;查看某sql語句的執(zhí)行計劃

【知識拓展來自以下博客】

作者:qq_32641659
來源:CSDN
原文:https://blog.csdn.net/qq_32641659/article/details/89421655
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接!

官網(wǎng):https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Explain

總結(jié)

以上是生活随笔為你收集整理的Hive SQL的执行流程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。