由於hive是使用mapreduce來執行,在只有少量資料的時候,執行效率反而不如單台機器執行效率高。
通過設定set hive.exec.mode.local.auto=true
,但當檔案大小超過128m或者數量大於四則會換到集群模式,可以由下面兩個命令設定
hive.exec.mode.local.auto.inputbytes.max=134217728(128m)
hive.exec.mode.local.auto.input.files.max=4
做join操作時小表放左邊,大表放右邊,但最新版本hive已經做優化,順序影響不大了。
開啟mapjoin的話,會自動判斷是否是小表,是小表就將小表加入記憶體。
set hive.auto.convert.join =
true
;#通過下面這個引數判斷是否滿足小表,預設25m
hive.mapjoin.smalltable.filesize
在reduce階段,相同key值資料過多,集中到乙個reduce上,而其他reduce則空閒,即導致了資料傾斜。
可以在map端進行聚合,或者用兩個mr任務實現負載均衡。
第乙個mr將map的結果隨機輸出到reduce,相同key值也會在不同的reduce上,完成聚合,就達到負載均衡的效果,第二個再把第乙個mr的結果中相同的key值分布到乙個reduce上,就ok了。
#開啟map端的聚合
set hive.map.aggr=true;
#資料傾斜時進行負載均衡
hive.groupby.skewindata
往hive裡插入資料時,要讓其實現自動進入相應的分割槽,需要做以下設定。
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
小檔案過多時開這個set mapred.job.reuse.jvm.num.tasks=n;
n為task個數
平行計算開這個set hive.exec.parallel=true;
用這個控制job數hive.exec.parallel.thread.number
hive 幾種hive優化方法
1.通過explain或者explain extended來檢視執行計畫。explain select from u3 執行結果 stage dependencies stage 0 is a root stage stage plans stage stage 0 fetch operator l...
sql優化的幾種方法
1.盡量不要使用 select from t 用具體的字段列表代替 不要返回用不到的任何字段。2.對查詢進行優化,應盡量避免全表掃瞄,首先應考慮在 where 及 order by 涉及的列上建立索引。3.應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行...
SQL優化的幾種方法
1 盡量避免使用select 返回無用的字段會降低查詢效率。如下 select from test 優化方式 使用具體的字段代替 只返回使用到的字段。2 對查詢進行優化,應盡量避免全表掃瞄,首先應考慮在 where 及 order by 涉及的列上建立索引。3 盡量避免進行null值的判斷,會導致資...