Hive性能調優

1.limit限制調整 --由於使用limit語句時候,是先執行整個查詢語句,而後再返回部分結果的 set hive.limit.optimize.enable=true; set hive.limit.row.max.size=10000; set hive.limit.optimize.limit.file=10;node

2.JOIN優化 。。。數據庫

  1. 本地模式 --hive嘗試使用本地模式執行查詢,要否則hive會使用MapReduce來執行其餘全部的查詢 set hive.exec.mode.local.auto=true;

4.並行執行 set hive.exec.parallel=true;app

5.嚴格模式 --對分區表進行查詢,在where子句中沒有加分區過濾的話,將禁止提交任務(默認:nonstrict) set hive.mapred.mode=strict;jvm

注:使用嚴格模式能夠禁止3種類型的查詢: (1)對於分區表,不加分區字段過濾條件,不能執行 (2)對於order by語句,必須使用limit語句。 (3)限制笛卡爾積的查詢(join的時候不使用on,而使用where的)。性能

6.調整mapper和reducer個數 set hive.exec.reducers.max=(集羣總reduce槽位個數*1.5)/(執行中的查詢的平均個數)fetch

7.JVM重用 set mapred.job.reuse.jvm.num.tasks=10; --10爲重用個數優化

8.索引 索引能夠加快含有group by語句的查詢的計算速度xml

9.動態分區調整 --動態分區屬性:設置爲true表示開啓動態分區功能(默認爲false) hive.exec.dynamic.partition=true;索引

--動態分區屬性:設置爲nonstrict,表示容許全部分區都是動態的(默認爲strict) --設置爲strict,表示必須保證至少有一個分區是靜態的 hive.exec.dynamic.partition.mode=strict;ci

--動態分區屬性:每一個mapper或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文件中 <property> <name>dfs.datanode.max.xcievers</name> <value>8192</value> </property>

10.推測執行 --目的:是經過加快獲取單個task的結果以及進行偵測將執行慢的TaskTracker加入到黑名單的方式來提升總體的任務執行效率

(1)修改 $HADOOP_HOME/conf/mapred-site.xml文件 <property> <name>mapred.map.tasks.speculative.execution </name> <value>true</value> </property> <property> <name>mapred.reduce.tasks.speculative.execution </name> <value>true</value> </property>

(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;啓用)

  1. 其餘參數調優 --開啓CLI提示符前打印出當前所在的數據庫名 set hive.cli.print.current.db=true;

--讓CLI打印出字段名稱 hive.cli.print.header=true;

--提升聚合的性能 set hive.map.aggr=true;

--對於簡單的不須要聚合的相似SELECT <col> from <table> LIMIT n語句,不須要起MapReduce job,直接經過Fetch task獲取數據 set hive.fetch.task.conversion=more;

相關文章
相關標籤/搜索