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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hive:表1inner join表2结果group by优化

發布時間:2024/4/14 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hive:表1inner join表2结果group by优化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題背景

最近遇到一個比較棘手的事情:hive sql優化:

lib表(id,h,soj,noj,sp,np) ? ? ? ? --一個字典表

mitem表(md,mt,soj,noj,sp,np)--一天的數據,包含小時分區的表。

業務:

1)需要先把lib表與mitem表進行關聯(關聯條件是lib.soj=mitem.soj and lib.noj=mitem.noj),關聯后的結果按照soj,md,mt,id,h進行分組;

2)對1)中的結果在分組的時候需要統計差值的平均值記為svalue;

3)對關聯后的分區的統計后的數據,進行一次分組排序:按照soj,md,mt分組,按照svalue排序,只保留同一個分組內排序第一的記錄。

其中表lib有3億條記錄,mitem表包含記錄數50~150億左右,lib與mitem關聯后的記錄數在6000億條記錄,之后對這個關聯后的結果進行進行分組卻執行了6小時后拋出異常問題。

嘗試解決方案

?瓶頸主要體現在在對第一次關聯后的記錄包含了6000億條記錄進行分組時,耗費資源,資源不足導致的問題。

嘗試過的解決方案:

1)創建索引:《hive:創建索引》

針對該6000億條記錄進行創建索引,耗費了20小時后依然是在stage2失敗了,此方案推翻。

2)對mitem數據按照小時粒度進行數據拆分,之后每一個小時的mitem與lib進行關聯,結果耗費時間為20多個小時,依然是拋出異常。

3)對mitem數據按照小時粒度進行分區,同時對lib表按照字段soj進行分頁(分10頁,一頁中包含的lib記錄數約3000w條)《hive:某張表進行分頁》

create table lib_soj as select soj?from lib group by soj;--記錄數約為8000條記錄

create table lib_soj_page as select row_number()over(order by soj)rnum,soj from lib_soj;

create table lib_1_1000 as select t10.* from lib t10 inner join?lib_soj_page t11 on t10.soj=t11.soj where t11.rnum between 1 and 1000;--記錄數約為3000w條記錄。

此時,拿一個小時的select * from?mitem where hour='2017102412' 與一個分頁中的soj進行關聯,數據終于出來了,可是耗費的時間為1小時20分,那么該總體時間為1.33*24*10小時。時間實際上太長了。

4)針對2)、3)的方案我們得知,如果把mitem查分帶來的效果實際上是不大,而查分lib的效果特別明顯,于是想到如果把lib查分的粒度更細與一天的mitem進行關聯是否可行(這里是查分為20份,一份數據約為1500w)。

測試結果,耗時3小時20分,那么總體的時間約為3.33*20小時。如果并行執行多個分頁的數據相信時間上會縮短。

?但是目前這個方案應該是shuffle時出現了數據偏移問題:

調優:

https://tech.meituan.com/spark-tuning-pro.html

提高shuffle并行度:

http://blog.csdn.net/u013939918/article/details/60956620

?

。

總結

以上是生活随笔為你收集整理的Hive:表1inner join表2结果group by优化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。