limit
限制調整
--因為使用
limit
語句時候,是先執行整個查詢語句,然後再返回部分結果的
set hive.limit.optimize.enable=true;
set hive.limit.row.max.size=10000;
set hive.limit.optimize.limit.file=10;
2.join
優化
。。。
3.
本地模式
--hive
嘗試使用本地模式執行查詢,要不然
hive
會使用mapreduce
來執行其他所有的查詢
set hive.exec.mode.local.auto=true;
4.
並行執行
set hive.exec.parallel=true;
5.
嚴格模式
--對分割槽表進行查詢,在
where
子句中沒有加分割槽過濾的話,將禁止提交任務
(預設:
nonstrict)
set hive.mapred.mode=strict;
注:使用嚴格模式可以禁止
3種型別的查詢:(1
)對於分割槽表,不加分割槽字段過濾條件,不能執行(2
)對於order by
語句,必須使用
limit
語句。(
3)限制笛卡爾積的查詢(
join
的時候不使用
on,而使用
where
的)。
6.調整和
reducer
個數
set hive.exec.reducers.max=(
集群總reduce
槽位個數
*1.5)/(
執行中的查詢的平均個數)
7.jvm
重用
set mapred.job.reuse.jvm.num.tasks=10; --10
為重用個數
8.
索引
索引可以加快含有
group by
語句的查詢的計算速度
9.
動態分割槽調整
--動態分割槽屬性:設定為
true
表示開啟動態分割槽功能(預設為
false
)hive.exec.dynamic.partition=true;
--動態分割槽屬性:設定為
nonstrict,
表示允許所有分割槽都是動態的(預設為
strict)--
設定為strict
,表示必須保證至少有乙個分割槽是靜態的
hive.exec.dynamic.partition.mode=strict;
--動態分割槽屬性:每個
或reducer
可以建立的最大動態分割槽個數
hive.exec.max.dynamic.partitions.pernode=100;
--動態分割槽屬性:乙個動態分割槽建立語句可以建立的最大動態分割槽個數
hive.exec.max.dynamic.partitions=1000;
--動態分割槽屬性:全域性可以建立的最大檔案個數
hive.exec.max.created.files=100000;
--控制datanode
一次可以開啟的檔案個數
--這個引數必須設定在
datanode
的$hadoop_home/conf/hdfs-site.xml
檔案中
dfs.datanode.max.xcievers
8192
10.
推測執行
--目的:是通過加快獲取單個
task
的結果以及進行偵測將執行慢的
tasktracker
加入到黑名單的方式來提高整體的任務執行效率
(1)修改
$hadoop_home/conf/mapred-site.xml檔案
mapred.map.tasks.speculative.execution
true
mapred.reduce.tasks.speculative.execution
true
(2)修改
hive
配置set hive.mapred.reduce.tasks.speculative.execution=true;
11.
單個mapreduce
中多個group by
--多個group by
操作組裝到單個
mapreduce
任務中set hive.multigroupby.singlemr=false;
12.
虛擬列
--當hive
產生了非預期的或
null
的時候,可以通過虛擬列進行診斷,判斷哪行資料出現問題
input__file__name
(輸入檔名)
block__offset__inside__file
(塊內偏移量)
row__offset__inside__block(
行偏移量,需要設定
hive.exec.rowoffset=true;啟用)
13.
其他引數調優
--開啟cli
提示符前列印出當前所在的資料庫名
set hive.cli.print.current.db=true;
--讓cli
列印出欄位名稱
hive.cli.print.header=true;
--提高聚合的效能
set hive.map.aggr=true;
--對於簡單的不需要聚合的類似
select from limit n
語句,不需要起
mapreduce job
,直接通過
fetch task
獲取資料
set hive.fetch.task.conversion=more;
參考:
hive效能調優總結
1.fetch抓取 hive.fetch.task.conversion more 在某些情況下不必要使用mr計算。hive預設是minimal,該屬性修改為more以後,在全域性查詢 字段查詢 limit查詢等都不走mapreduce。2.本地模式 hive在進行集群作業時多台機器上協調執行,解決...
hive效能優化
向量查詢 vectorized query 每次處理資料時會將1024行資料組成乙個batch進行處理,而不是一行一行進行處理,這樣能夠顯著提高執行速度。可以通過設定 error error while processing statement failed execution error,retu...
Hive學習總結之五 HBase和Hive的整合
hive和hbase有各自不同的特徵 hive是高延遲 結構化和面向分析的,hbase是低延遲 非結構化和面向程式設計的。hive資料倉儲在hadoop上是高延遲的。hive整合hbase就是為了使用hbase的一些特性。如下是hive和hbase的整合架構 圖1 hive和hbase架構圖 hiv...