hive調優之 優化hive-site.xml配置

***************hive多級目錄做爲輸入-beginhtml

!hive.mapred.supports.subdirectories=false。是否將多級子目錄做爲輸入,默認false是隻能當前目錄的文件。推薦使用以下配置:node

<property>
 <name>hive.mapred.supports.subdirectories</name>
 <value>true</value>
 <description>
   Whether the version of Hadoop which is running supports sub-directories for tables/partitions.
   Many Hive optimizations can be applied if the Hadoop version supports sub-directories for
   tables/partitions. It was added by MAPREDUCE-1501
 </description>
</property>

!mapreduce.input.fileinputformat.input.dir.recursive=false。是否將多級子目錄做爲輸入,默認false是隻能web

當前目錄的文件。推薦使用以下配置:sql

<property>
 <name>mapreduce.input.fileinputformat.input.dir.recursive</name>
 <value>true</value>
 <description>
   Whether the version of Hadoop which is running supports sub-directories for tables/partitions.
   Many Hive optimizations can be applied if the Hadoop version supports sub-directories for
   tables/partitions. It was added by MAPREDUCE-1501
 </description>
</property>

參考以前的博客:Hive和MapReduce將多級子目錄做爲輸入apache

***************hive多級目錄做爲輸入-end併發

***************hive優化之打開本地模式-beginapp

hive本地模式,當job數據量較小時,本地模式運行速度將更快。負載均衡

!hive.exec.mode.local.auto=false。是否使用本地模式,推薦打開此功能,因此推薦使用以下配置jvm

<property>
  <name>hive.exec.mode.local.auto</name>
  <value>true</value>
  <description>Let Hive determine whether to run in local mode automatically</description>
</property>

!hive.exec.mode.local.auto.inputbytes.max=134217728,推薦使用默認配置。hive本地模式的job輸入數據大小oop

!hive.exec.mode.local.auto.tasks.max=4,推薦使用默認配置。hive本地模式的map個數

參考:hive使用本地模式

***************hive優化之打開本地模式-end

***************hive優化之打開併發執行-begin

在同一個sql中的不一樣的job是否能夠同時運行

!hive.exec.parallel=false,默認是不能併發執行的,推薦使用以下配置

<property>
  <name>hive.exec.parallel</name>
  <value>true</value>
</property>

參考:hive.exec.parallel參數

!hive.exec.parallel.thread.number=8,推薦使用默認配置,控制對於同一個sql來講同時能夠運行的job的最大值,若是你的job更多,而資源也夠,能夠設置更大一點。

參考:參數hive.exec.parallel.thread.number說明

***************hive優化之打開併發執行-end

***************hive優化之調整limit限制-begin

!hive.limit.optimize.enable=false,推薦使用以下配置,是否打開hive limit優化

<property>
  <name>hive.limit.optimize.enable</name>
  <value>true</value>
</property>

!hive.limit.row.max.size=100000,推薦使用默認配置,limit最大行數

!hive.limit.optimize.limit.file=10,推薦使用默認配置,limit最多限制文件數

***************hive優化之調整limit限制-end

***************hive優化之啓用嚴格模式-begin

!hive.mapred.mode=nonstrict,推薦使用以下設置,注意若是表中必定有動態分區的查詢,這裏也能夠使用非嚴格模式。嚴格模式只是防止數據量過大的查詢。

<property>
  <name>hive.mapred.mode</name>
  <value>strict</value>
</property>

用嚴格模式能夠禁止 3 種類型的查詢:

( 1 )對於分區表,不加分區字段過濾條件,不能執行。

( 2 )對於 order by 語句,必須使用 limit 語句。

( 3 )限制笛卡爾積的查詢( join 的時候不使用 on ,而使用 where 的)。

***************hive優化之啓用嚴格模式-end

!mapred.job.reuse.jvm.num.tasks=1,推薦使用以下配置,hive-site.xml找不到。表示一個JVM上最多能夠順序執行的task數目(屬於同一個Job),默認一個task啓一個JVM

<property>
  <name>mapred.job.reuse.jvm.num.tasks</name>
  <value>10</value>
</property>

參考:Hadoop的JVM重用

***************hive優化之推測執行-begin

hadoop的推測執行,可是有些時候若是推測執行沒利用好,反而有可能形成相反的做用,具體參考:mapred.map.tasks.speculative.execution參數影響性能

!mapred.map.tasks.speculative.execution=true,推薦使用默認配置

!mapred.reduce.tasks.speculative.execution=true,推薦使用默認配置

***************hive優化之推測執行-end

!hive.multigroupby.singlereducer=true,推薦使用默認配置。在hive-site.xml中有這個屬性的解釋,翻譯一下就是,是否將多group by的查詢優化成單個M/R任務計劃,若是多個group by查詢具備相同的group by key,它將優化生成單個M/R任務。

在hive1.1.0版本中是這個屬性名。可是在別的版本中有多是下面這個屬性名,其實它們的意義是同樣的。

!hive.multigroupby.singlemr=false,推薦使用以下配置。將多個group by產出爲一個單一map/reduce任務計劃,固然約束前提是group by有相同的key。

<property>
  <name>hive.multigroupby.singlemr</name>
  <value>true</value>
</property>

!hive.optimize.multigroupby.common.distincts=true,推薦使用默認配置。官方的英文也有點看不懂,大概意思就是當有相同的distinct列時,會進行對job plan進行優化。

!hive.groupby.skewindata=false,推薦使用以下配置。用於控制負載均衡的。當數據出現傾斜時,若是該變量設置爲true,那麼Hive會自動進行負載均衡。

<property>
  <name>hive.groupby.skewindata</name>
  <value>true</value>
</property>

當爲false時,能在聚合兩個不一樣的distinct列,若是爲true,則只能有一個distinct列

參考:Hive - hive.groupby.skewindata環境變量與負載均衡

***************hive優化之map輸入合併-begin

!mapred.max.split.size=256000000,推薦是用默認配置,hive-site.xml找不到。每一個Map最大輸入大小,決定合併後的文件數,是否應該根據block大小調整?

!mapred.min.split.size.per.node=1,推薦使用以下配置,hive-site.xml找不到。一個節點上split的至少的大小 ,決定了多個data node上的文件是否須要合併

<property>
  <name>mapred.min.split.size.per.node</name>
  <value>100000000</value>
</property>

!mapred.min.split.size.per.rack=1,推薦使用以下配置,hive-site.xml找不到。一個交換機下split的至少的大小,決定了多個交換機上的文件是否須要合併

<property>
  <name>mapred.min.split.size.per.rack</name>
  <value>100000000</value>
</property>

!hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat,推薦使用默認配置。執行Map前進行小文件合併

參考:Hive小文件合併

***************hive優化之map輸入合併-end

***************hive優化之輸出合併-begin

!hive.merge.mapfiles=true,推薦使用默認配置。在map-only job後合併文件。

!hive.merge.mapredfiles=false,推薦使用以下配置。在map-reduce job後合併文件。

<property>
  <name>hive.merge.mapredfiles</name>
  <value>true</value>
</property>

!hive.merge.size.per.task=256000000,推薦使用默認配置。合併後每一個文件的大小,是否應該根據block大小調整?

!hive.merge.smallfiles.avgsize=16000000,推薦使用默認配置。平均文件大小,是決定是否執行合併操做的閾值,是否應該根據block大小調整?

參考:Hive小文件合併    hive 小文件的合併 hive.merge.mapredfiles

***************hive優化之輸出合併-end

***************hive優化之調整reduce數目-begin

!hive.exec.reducers.bytes.per.reducer=256000000,推薦使用以下配置。每一個reduce任務處理的數據量。

<property>
  <name>hive.exec.reducers.bytes.per.reducer</name>
  <value>1073741824</value>
</property>

!hive.exec.reducers.max=1009,推薦使用默認值。每一個任務最大的reduce數。

!mapreduce.job.reduces=1,推薦使用默認值。手動指定job的reduce數量。

注意,在hadoop2中,mapred.reduce.tasks更名爲mapreduce.job.reduces了,可是這兩個參數你均可以使用,只是第一個參數過期了。

***************hive優化之調整reduce數目-end

————————————————————————————————————————————————————————————

隨着任務的不一樣,而應該使用set 從新設置的參數以下,這裏屬性設置的大小,應該和你的機器配置、數據有關,而不能一律而論。好比若是機器配置好一點,reduce處理的數據應該就能夠稍微設置的大一點了。

***************hive優化之map輸入合併-begin

!mapred.max.split.size=256000000。每一個Map最大輸入大小,若是map的處理邏輯不是很複雜,就能夠設置的大一點。好比若是輸入僅2個字段,並且處理邏輯稍微複雜一點,須要每行都處理邏輯,那麼這個值就能夠稍微設置小一點。若是不是很清楚,可以使用默認值。即最大輸入大小256M

!mapred.min.split.size.per.node=1。每一個分片split的最小的數據大小,決定了小的split是否須要合併,默認是1,是不須要合併的,因此這裏確定要設置讓它合併,能夠根據機器配置,設置對應的大小。若是不是很清楚,可以使用100000000。即分片大小不能小於100M

一個恰當的map並行度是大約每一個節點10-100個map,且最好每一個map的執行時間至少一分鐘。

參考:Hive小文件合併 Hadoop MapReduce Job性能調優——修改Map和Reduce個數

***************hive優化之map輸入合併-end

***************hive優化之輸出合併-begin

!hive.merge.size.per.task=256000000,推薦使用默認配置。合併後每一個文件的大小。若是不是很清楚,可以使用默認值。256M一個文件的大小。

!hive.merge.smallfiles.avgsize=16000000,推薦使用默認配置。平均文件大小,是決定是否執行合併操做的閾值。若是不是很清楚,可以使用默認值。

參考:Hive小文件合併    hive 小文件的合併 hive.merge.mapredfiles

***************hive優化之輸出合併-end

***************hive優化之調整reduce數目-begin

!hive.exec.reducers.bytes.per.reducer=256000000,推薦使用以下配置。每一個reduce任務處理的數據量。若是不是很清楚,可以使用默認值。

!mapreduce.job.reduces=1,推薦使用默認值。手動指定job的reduce數量。若是不是很清楚,可以使用默認值。

注意,在hadoop2中,mapred.reduce.tasks更名爲mapreduce.job.reduces了,可是這兩個參數你均可以使用,只是第一個參數過期了。

具體參考:Hadoop MapReduce Job性能調優——修改Map和Reduce個數

***************hive優化之調整reduce數目-end

相關文章
相關標籤/搜索