hive调优之 优化hive-site.xml配置

***************hive多级目录作为输入-begin

!hive.mapred.supports.subdirectories=false。是否将多级子目录作为输入,默认false是只能当前目录的文件。推荐使用如下配置:

<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是只能

当前目录的文件。推荐使用如下配置:

<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将多级子目录作为输入

***************hive多级目录作为输入-end

***************hive优化之打开本地模式-begin

hive本地模式,当job数据量较小时,本地模式运行速度将更快。

!hive.exec.mode.local.auto=false。是否使用本地模式,推荐打开此功能,所以推荐使用如下配置

<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输入数据大小

!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

转载于:https://my.oschina.net/cjun/blog/666532

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值