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等標籤 用於提高產品展示的...