
查看hive語句的執(zhí)行流程:explain select ….from t_table …;
成都創(chuàng)新互聯(lián)是網(wǎng)站建設技術企業(yè),為成都企業(yè)提供專業(yè)的網(wǎng)站建設、網(wǎng)站制作,網(wǎng)站設計,網(wǎng)站制作,網(wǎng)站改版等技術服務。擁有十多年豐富建站經(jīng)驗和眾多成功案例,為您定制適合企業(yè)的網(wǎng)站。十多年品質(zhì),值得信賴!


流程大致步驟為:
1.?用戶提交查詢等任務給Driver。
2.?編譯器獲得該用戶的任務Plan。
3.?編譯器Compiler根據(jù)用戶任務去MetaStore中獲取需要的Hive的元數(shù)據(jù)信息。
4.?編譯器Compiler得到元數(shù)據(jù)信息,對任務進行編譯,先將HiveQL轉(zhuǎn)換為抽象語法樹,然后將抽象語法樹轉(zhuǎn)換成查詢塊,將查詢塊轉(zhuǎn)化為邏輯的查詢計劃,重寫邏輯查詢計劃,將邏輯計劃轉(zhuǎn)化為物理的計劃(MapReduce),?最后選擇最佳的策略。
5.?將最終的計劃提交給Driver。
7.?獲取執(zhí)行的結果。
8.?取得并返回執(zhí)行結果。
例:SELECT pv.pageid, u.age FROM page_view pv JOIN user u ON pv.userid = u.userid;
map 端:以 JOIN ON 條件中的列作為 Key,以page_view表中的需要字段,表標識作為value,最終通過key進行排序,也就是join字段進行排序。
shuffle端:根據(jù) Key 的值進行 Hash,并將 Key/Value 對按照 Hash 值推 至不同對 Reduce 中
reduce 端:根據(jù)key進行分組,根據(jù)不同的表的標識,拿出不同的數(shù)據(jù),進行拼接。
例:SELECT pageid, age, count(1) FROM pv_users GROUP BY pageid, age;
map 端:
key:以pageid, age作為key,并且在map輸出端有combiner。
value :1次
reduce 端:對value進行求和
例:select distinct age from log;
map端:
key:age
value:null
reduce端:
一組只要一個輸出context.write(key,null)。
例:select count(distinct userid) from weibo_temp;
即使設置了reduce個數(shù)為3個,最終也只會執(zhí)行一個,因為,count()是全局,只能開啟一個reducetask。
map端:
key:userid
value: null
reduce端:
一組只要一個,定義一個全局變量用于計數(shù),在cleanup(Context context) 中輸出context.write(key,count)
當然distinct+count是一個容易產(chǎn)生數(shù)據(jù)傾斜的做法,應該盡量避免,如果無法避免,那么就使用這種方法:
select count(1) from (select distinct userid from weibo_temp); 這樣可以并行多個reduce task任務,從而解決單節(jié)點的壓力過大。
網(wǎng)站標題:hive的執(zhí)行流程
本文網(wǎng)址:http://www.yijiale78.com/article16/ihdsdg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供微信小程序、App開發(fā)、做網(wǎng)站、品牌網(wǎng)站建設、營銷型網(wǎng)站建設、響應式網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)