HIVE優化 解決方案

2021-10-08 11:09:32 字數 2405 閱讀 5221

1.開啟並行引數

set hive.exec.parallel=true

set hive.exec.parallel.thread.number=16; //同乙個sql允許最大並行度,預設為8

2.負載均衡引數(只針對groupby操作的傾斜)

set hive.groupby.skewindata=ture

但如果要在查詢語句中對多個字段進行去重統計時會報錯。

例select count(distinct id),count(distinct x) from test;

只支援單個欄位去重

select count(distinct id, x) from test

*sethive.optimize.skewjoin=true;--如果是join 過程出現傾斜 應該設定為true*--這個東西待查閱資料確認

3.map端提前聚合

set hive.map.aggr=true (開啟map端combiner);

4.替換合併小檔案(可以減少map數)

set mapred.max.split.size=100000000; 相當於100m ----每個map最大輸入大小,決定合併後的檔案數

set mapred.min.split.size.per.node=100000000; ----乙個節點上split的至少的大小 ,決定了多個data node上的檔案是否需要合併

set mapred.min.split.size.per.rack=100000000; ----乙個交換機下split的至少的大小,決定了多個交換機上的檔案是否需要合併

set hive.input.format=org.apache.hadoop.hive.ql.io.combinehiveinputformat;---執行map前進行小檔案合併

前面三個引數確定合併檔案塊的大小,大於檔案塊大小128m的,按照128m來分隔,小於128m,大於100m的,按照100m來分隔,把那些小於100m的(包括小檔案和分隔大檔案剩下的),最後這個引數表示執行前進行小檔案合併

----執行map前進行小檔案合併----

前面三個引數確定合併檔案塊的大小,大於檔案塊大小128m的,按照128m來分隔,小於128m,大於100m的,按照100m來分隔,把那些小於100m的(包括小檔案和分隔大檔案剩下的),最後這個引數表示執行前進行小檔案合併

1. 盡量盡早地過濾資料,減少每個階段的資料量

2. 盡量只選擇需要使用到的字段

3.使用hint的mapjoin(spark的廣播變數概念和這個差不多)

mapjion會把小表(小表一般概念是資料量小於2000,資料大小小於1m,當然主要還是看記憶體大小)全部讀入記憶體中,在map階段直接拿另外乙個表的資料和記憶體中表資料做匹配,由於在map是進行了join操作,省去了reduce執行的效率也會高很多,慎重使用mapjoin,不然會引起磁碟和記憶體大量消耗

select /*+ mapjoin(a)*/ f.a,f.b from a t join b f  on ( f.a=t.a and f.ftime=20110802)

4. 如果union all的部分個數大於2,或者每個union部分資料量大,應該拆成多個insert into 語句。

insert overwitetable tablename partition (dt= ....)

select .....from (

select ... froma

union all

select ... fromb

union all

select ... fromc

) rwhere ...;

可以改寫為:

insert intotable tablename partition (dt= ....)

select ....from a

where ...;

insert intotable tablename partition (dt= ....)

select ....from b

where ...;

insert intotable tablename partition (dt= ....)

select ....from c

where ...;

5. 注意避免寫沒有group by的聚合,這種情況下無論怎麼設定,reduce都只會只有一

比如select sum(bal) from a where dt =20200527

最好寫成

select dt,sum(bal) from a where dt =20200527 group by dt

6.join部分加隨機數關聯(加鹽)

7.groupby的操作可以做兩次mr:1.key值加隨機字首然後groupby  2.去處字首再做一次groupby

8.兩個表join關聯都在關聯key上做分桶處理

Hbase的優化解決方案

1.hbase的periodic flusher 一般hbase在預設情況下回自動觸發flush操作,初衷是為了防止有些memstore長時間不flush,在沒有進行wal的情況下,出現資料的丟失.由於我們的hbase每個region server 有將近100個resign,幾乎每分鐘都有regi...

App啟動優化解決方案

首先,定義執行緒排程類,dispatcherexecutor。這個類的主要作用就是初始化執行緒池,作為接收所有任務的容器類。在oncreate方法中,初始化任務物件,然後將各個物件塞入任務容器,這裡邊會有乙個演算法的操作,稱為有向無環圖的拓撲排序,將有依賴關係的各任務執行關係進行排序,排序好的任務會...

Zen Cart 程式站內優化解決方案

zen cart 程式站內優化解決方案 眾所周知,zen cart是最好的 程式之一,但與生俱來的一些程式問題干擾了站內搜尋引擎優化。所以需要通過外掛程式的應用及2次開發來達到我們更好的通過搜尋引擎銷售產 品的目的。解決方法 安裝優化外掛程式 用於優化分類及產品頁面meta等標籤 用於提高產品展示的...