***************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 fortables/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 fortables/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.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