Hive如何調優

2021-10-10 17:50:43 字數 2768 閱讀 6182

把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...