#增長reducer任務數量(拉取數量分流) set mapred.reduce.tasks=20; #在同一個sql中的不一樣的job是否能夠同時運行,默認爲false set hive.exec.parallel=true; #增長同一個sql容許並行任務的最大線程數 set hive.exec.parallel.thread.number=8; #設置reducer內存大小 set mapreduce.reduce.memory.mb=4096; set mapreduce.reduce.java.opts=-Xmx3584m; -- -Xmx 設置堆的最大空間大小。
#mapjoin相關設置,小表加載到內存,無reduce
set hive.mapjoin.smalltable.filesize=25000000; -- 刷入內存表的大小(字節)。注意:設置太大也不會校驗,因此要根據本身的數據集調整
set hive.auto.convert.join = true; -- 開啓mapjoin,默認false
set hive.mapjoin.followby.gby.localtask.max.memory.usage=0.6 ;--map join作group by操做時,可以使用多大的內存來存儲數據。若數據太大則不會保存在內存裏,默認0.55
set hive.mapjoin.localtask.max.memory.usage=0.90; -- 本地任務能夠使用內存的百分比,默認值:0.90
-- 在設置成false時,能夠手動的指定mapjoin /*+ MAPJOIN(c) */ 。-->c:放到內存中的表
select /*+ MAPJOIN(c) */ * from user_install_status u
inner join country_dict c
on u.country=c.code
-- 若是不是作innerjoin, 作left join 、right join
-- A left join B, 把B放到內存
-- A right join B, 把A放到內存
#設置執行引擎
set hive.execution.engine=mr; -- 執行MapReduce任務,也能夠設置爲spark
-- 設置內存大小
set mapreduce.reduce.memory.mb=8192; -- reduce 設置的是 Container 的內存上限,這個參數由 NodeManager 讀取並進行控制,當 Container 的內存大小超過了這個參數值,NodeManager 會負責 kill 掉 Container
set mapreduce.reduce.java.opts=-Xmx6144m; -- reduce Java 程序能夠使用的最大堆內存數,要小於 mapreduce.reduce.memory.mb
set mapreduce.map.memory.mb=8192; -- map申請內存大小
set mapreduce.map.java.opts=-Xmx6144m;
#動態分區設置,參考:https://www.cnblogs.com/cssdongl/p/6831884.html
set hive.exec.dynamic.partition=true; 是開啓動態分區
set hive.exec.dynamic.partition.mode=nonstrict; 這個屬性默認值是strict,就是要求分區字段必須有一個是靜態的分區值,當前設置爲nonstrict,那麼能夠所有動態分區
#其餘
-- 開始負載均衡
set hive.groupby.skewindata=true
-- 開啓map端combiner
set hive.map.aggr=true
參數調節:css
SQL 語句調節:html