hive常見調優

2021-10-06 23:44:56 字數 1540 閱讀 4234

1、set hive.optimize.skewjoin=true,開啟優化

set hive.skewjoin.key=100000    ,key超過這個條數就進行優化

兩個引數一般同時使用,join產生傾斜時開啟,目的在於將產生傾斜的key通過map side join處理,其它key正常在reduce端join

2、map side join

set hive.auto.convert.join=true;

set hive.mapjoin.smalltbale.filesize; 預設為25mb,其中乙個表小於該值時自動優化

3、group by 優化

set hive.groupby.skewindata=true;

將乙個mapreduce轉換成兩個mapreduce,第乙個mapreduce將key隨機寫到不同的reduce中,第二個mr是做真正的聚合操作

4、count(distinct)

discinct需要在reduce端做,count又限制了只能有乙個reduce,所以效率很低

select count(*) from (select distinct col from tablea)t;

5、開啟並行化執行

set hive.exec.parallel=true;

資源換取時間的方式

6、本地化執行

hive大多數job需要提交到集群執行,在資料量很小的情況下是沒有必要的,將job提交到集群的時間甚至比查詢的時間還多,對於這種情況,hive可以在單台節點上處理job

滿足本地化執行條件:

a、job輸入資料小於 hive.exec.mode.local.auto.inputbytes.max(預設128mb)

b、job的map數小於hive.exec.mode.local.auto.tasks.max(預設為4)

c、job的reduce數為0或者1

7、調整任務map數

對於每個不滿足切片大小的檔案都會產生乙個map task,如果輸入的小檔案過多,會產生大量map task,大量map task的啟動和初始化會浪費很多的時間和資源。但是對於檔案大小不大;

但是檔案內記錄很多,則需要增加map數和reduce數(mapred.reduce.tasks),提高任務並行度

set mapred.max.split.size,

切片大小計算:

minsize=max 

maxsize=mapred.max.split.size

splitsize=max}

8、jvm重用

當小檔案過多,或者task數量很多且執行時間短會導致jvm頻繁啟停,浪費較多資源和時間,set mapred.job.reuse.jvm.num.tasks=20;(預設為1)

jvm重用可以啟動一次jvm程序,執行乙個job中的多個task後銷毀

9、啟用嚴格模式set hive.mapred.mode=strict;

嚴格模式下:

10、關閉推測執行

因為導致某個task執行時間過長的原因往往是資料傾斜,此時開啟推測執行就是在浪費資源

hive效能調優

原文 limit 限制調整 因為使用 limit 語句時候,是先執行整個查詢語句,然後再返回部分結果的 set hive.limit.optimize.enable true set hive.limit.row.max.size 10000 set hive.limit.optimize.limi...

Hive效能調優

軟體環境 hive1.2.1 hadoop2.6.4 直接使用hive cli模式執行 1.設定執行引擎 set hive.execution.engine mr set hive.execution.engine spark 如果設定執行引擎為mr,那麼就會呼叫hadoop的maprecude來執...

Hive引數調優

一 map 階段的優化 1.map數的計算公式為 num map tasks max min mapred.min.spilt.size 指的是資料的最小分割單元大小 預設為1b mapred.max.split.size 指的是資料的最大分割單元大小 預設為 256mb dfs.block.siz...