把hive sql當作mapreduce程式進行優化hive抓取策略
hive允許方式
平行計算
嚴格模式
hive排序
hive join
map-side聚合(combiner)
合併小檔案
jvm重用
hive中對某些情況的查詢不需要mapreduce
set hive.fetch.task.conversion=none / more
;
即轉化的mapreduce程式是通過本地模式執行還是集群模式執行。開啟本地模式
set hive.exec.mode.local.auto=true;
注意
hive.exec.model.local.auto.inputbytes.max
預設值為128m,表示本地模式執行的情況下載入模式的最大值,若大於該配置仍會以集群方式來執行!
set hive.exec.parallel=true;
set hive.exec.parallel.thread.number=x;
通過禁止執行一些已知會影響hive執行效能的操作,來達到提高hive效能的目的。預設為:
nostrict
set hive.mapred.mode=strict;
對於分割槽表,必須新增where對於分割槽欄位的條件過濾
order by語句必須包含limit輸出限制
限制執行笛卡爾積的查詢
對於查詢結果做全排序,只有乙個reduce進行處理,當資料量較大的時候,應慎用。
嚴格模式下,必須結合limit來使用。
對於單個reduce的資料進行排序。
分割槽排序,即按照指定的字段對資料進行劃分到不同的reduce中去。
經常和sort by結合使用。
相當於sort by + distribute by,但是不能指定排序規則,可以通過sort by 和 distribute by自定義排序規則。
在map端完成join操作,適用於大小表的join,將小表載入至map端的記憶體中,進行join操作sql手動
在sql語句中新增mapjoin標記(mapjoin hint)
語法
select
/*+ mapjoin(smalltable) */ smalltable.
key, bigtable.
value
from smalltable join bigtable on smalltable.
key= bigtable.
key
自動hive自動對左邊的表進行統計量,如果是小表就加入記憶體,即對小表使用mapjoin.配置
開啟自動mapjoin
set hive.auto.convert.join =
true
;
避免資料傾斜
set hive.map.aggr=true;
檔案數目小,容易在檔案儲存端造成壓力,給hdfs造成壓力,影響效率
# 是否合併map輸出檔案
hive.merge.mapfiles=true
# 是否合併reduce輸出檔案
hive.merge.mapredfiles=true
# 合併檔案後的大小
hive.merge.size.per.task=256 * 1000 * 1000
當資料量大的情況,由於countdistinct操作需要用乙個reduce task來完成,導致乙個reduce很難完成。一般count distinct使用先group by再count的方式替換。
# 乙個split的最大值,即每個map處理檔案的最大值
mapred.max.split.size
# 乙個結點上split的最小值
mapred.min.split.size.per.node
# 乙個機架上的最小值
mapred.min.split.size.per.rack
# 強制指定reduce任務的數量
mapred.reduce.tasks
# 每乙個reduce任務處理的資料了
hive.exec.reducers.bytes.per.reducer
# 每個任務最大的reduce數
hive.exec.reducers.max
小檔案個數過多
task個數過多
set
= mapred.job.reuse.jvm.num.tasks=n;
# n為插槽數
設定開啟之後,task插槽會一直站用資源,不論是否有task在執行,直到整個job全部完全執行完畢後,才會釋放所有的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...