hivesql 效率優化

2021-08-17 11:01:06 字數 999 閱讀 5212

1.group by 資料傾斜問題

hive是根據group by 的key進行資料分發的,某個key相同的資料太多的會被分發到乙個reducer上,key的資料分布不均勻會導致大量資料被shuffle到某個或者某些reducer上,出現嚴重的資料傾斜,使得資料計算變慢

配置任務引數   set hive.groupby.skewindata=true;

原理:該配置會觸發hive增加額外的mr過程,隨機化key後進行聚合操作得到中間結果,再對中間結果執行最終的聚合操作

注意:count(distinct) 操作比較特殊,無法進行中間的聚合操作,因此該引數對有count(distinct)操作的sql不適用,如果有count(distinct)的需求可以優化sql,先進行一步group by進行變形

2.map優化

大表join小表時候可以使用map join

配置引數  set hive.auto.convert.join=true;

原理:使用該配置,hive會自動識別比較小的表,繼而用mapjoin來實現兩個表的聯合

3.count(distinct)優化

是第乙個問題的延伸,包含count(distinct)操作必須在乙個reducer上完成,資料傾斜不能使用預聚合的方式進行優化

配置引數:使用group by替代 count(distinct) 操作,使用group by將count(distinct)等價替換掉

4.join 資料傾斜

hive 根據 join key 對兩邊表的資料進行shuffle,若key資料分布不均勻會出現資料傾斜的現象

優化方案:

1.保證兩種表的粒度是正確的,join key在至少至少一張表中是不重複的,否則會出現類似笛卡爾積的效果,造成資料膨脹

2.如果join key是無意義的空值等,直接剔除掉再進行關聯

3.對join key 進行隨機化處理

set hive.mapred.mode=nonstrict;

在join過程中對key進行隨機化處理

hive sql優化整理

hive sql優化方法引數一些整理,方便快速查詢使用 1.map數量與reduce數量的控制 輸入檔案大小指實際檔案大小,與檔案格式textfile,orc等無關,壓縮的檔案格式會小很多設定引數要適當調整 map數量控制 set hive.input.format org.apache.hadoo...

HIVESQL優化方法

這是我2年前總結的東西,當時是用華為paas平台的大資料集群的時候,因為我們公司分配的資源較少,自己總結的部分優化方法,如有不足,望大家指正 1 set hive.map.aggr true false 當使用聚合函式時會在ma階段進行聚合 效率更高同時消耗更多資源 2 當join表的時候有乙個大表...

HiveSql效能優化

一 解決資料傾斜 1.過濾掉null部分 key值存在大量空欄位,會hash到同一reduce,造成reduce長尾,將null 值過濾掉 舉例 select user id from logs where statdate 20170815 where user id is not null 2....