Hive 調優詳解

2021-09-09 09:01:25 字數 2192 閱讀 7677

在舊版本的 hive 中,hive-default.xml.template檔案中hive.fetch.task.conversion預設是minimal, 修改為more後, 全域性查詢、字段查詢、limit查詢等都會直接執行而不會執行 mapreduce.

新版本的 hive fetch 的預設值已改為more.

資料量小的情況下, 可以使用本地模式單機查詢

通過設定hive.exec.mode.local.auto的值為true來實現

可直接在 hive 的 cli 中或 beeline 中設定

set hive.exec.mode.local.auto=true; 

//設定最大輸入資料量,小於這個值採用本地模式,預設為134217728(128m)

set hive.exec.mode.local.auto.inputbytes.max=536870912;

//設定最大輸入檔案個數,小於這個值時採用本地模式,預設為4

set hive.exec.mode.local.auto.input.files.max=30;

資料量小的情況下, 查詢速度可提公升數倍

join 語句, 小表, key 較分散的表放在左邊, 大表放在右邊

實際測試中, 新版的 hive 優化器已對此做出處理, 無論放左邊還是右邊已無明顯區別

上面已經介紹了幾種有可能導致資料傾斜的情況, 並列出具體處理手段, 下面介紹另外幾種常用方法

inputformat 類中有兩個方法, 分別是 getinputsplits(), 返回型別 inputsplit, 和 createrecordreader

getinputsplits() 中有以下方法:

computeslitesize(math.max(minsize,math.min(maxsize,blocksize)))=blocksize=128m

直接設定個數

set mapreduce.job.reduces = 15;
永久修改: 調整mapred-default.xml中的此引數

調整配置

hive.exec.reducers.bytes.per.reducer=256000000  //每個 reducer 預設處理量   x

hive.exec.reducers.max=1009 //預設每個任務的最大 reducer 數 y

n=min(y, 資料總量/x) //reducer 數量公式

乙個 hive 查詢包含多個階段, 如 抽樣, 合併, limit 等, 預設情況下, hive一次只會執行乙個階段, 某些特定 job 包含眾多並不互相依賴的階段, 可以並行執行

set hive.exec.parallel=true;              //開啟任務並行執行

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

hadoop 預設使用派生 jvm 執行 map 和 reduce 任務, jvm的啟動過程可能會造成相當大的開銷,特別是執行的 job 包含 大量 task 任務處理小檔案的情況.

可以設定mapred-site.xml配置同乙個 jvm 例項的重用次數

mapreduce.job.jvm.numtasks

10how many tasks to run per jvm. if set to -1, there is

no limit.

缺點是開啟 jvm 重用將一直占用使用到的 task 插槽, 直到此 job 完成才釋放

自動推測同乙個作業中執行慢的節點, 啟動額外任務同時處理同乙份資料, 最終使用最先執行完成的作為結果

檢視 hadoop 支援的壓縮方式

hadoop checknative

上傳解壓後進入 hadoop 根目錄下 lib/native 並拷貝所有檔案到原 hadoop 根目錄下的 lib/native中覆蓋

分發集群並重啟

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