Hive基础知识(二十四):Hive Job 优化

1. Hive Map 优化

1.1. 复杂文件增加 Map 数

当 input 的文件都很大,任务逻辑复杂,map 执行非常慢的时候,可以考虑增加 Map 数,来使得每个 map 处理的数据量减少,从而提高任务的执行效率。

增加 map 的方法为:根据

computeSliteSize(Math.max(minSize,Math.min(maxSize,blocksize)))=blocksize=128M 公式, 调整 maxSize 最大值。让 maxSize 最大值低于 blocksize 就可以增加 map 的个数。

案例实操:

1)执行查询

hive (default)> select count(*) from emp; 
Hadoop job information for Stage-1: number of mappers: 1; number of  reducers: 1

2)设置最大切片值为 100 个字节

hive (default)> set mapreduce.input.fileinputformat.split.maxsize=100;
hive (default)> select count(*) from emp;
Hadoop job information for Stage-1: number of mappers: 6; number of 
reducers: 1

1.2. 小文件进行合并

1)在 map 执行前合并小文件,减少 map 数:CombineHiveInputFormat 具有对小文件进行合 并的功能(系统默认的格式)。HiveInputFormat 没有对小文件合并功能。

set hive.input.format= org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;

2)在 Map-Reduce 的任务结束时合并小文件的设置:

在 map-only 任务结束时合并小文件,默认 true

set hive.merge.mapfiles = true; 

在 map-reduce 任务结束时合并小文件,默认 false

set hive.merge.mapredfiles = true; 

合并文件的大小,默认 256M

set hive.merge.size.per.task = 268435456; 

当输出文件的平均大小小于该值时,启动一个独立的 map-reduce 任务进行文件 merge

set hive.merge.smallfiles.avgsize = 16777216;

1.3. Map 端聚合

set hive.map.aggr=true;相当于 map 端执行 combiner

1.4. 推测执行

set mapred.map.tasks.speculative.execution = true #默认是 true

2. Hive Reduce 优化

2.1. 合理设置 Reduce 数

1)调整 reduce 个数方法一

(1)每个 Reduce 处理的数据量默认是 256MB

set hive.exec.reducers.bytes.per.reducer = 256000000 

(2)每个任务最大的 reduce 数,默认为 1009

set hive.exec.reducers.max = 1009 

(3)计算 reducer 数的公式

N=min(参数 2,总输入数据量/参数 1)(参数 2 指的是上面的 1009,参数 1 值得是 256M)

2)调整 reduce 个数方法二

在 hadoop 的 mapred-default.xml 文件中修改

设置每个 job 的 Reduce 个数

set mapreduce.job.reduces = 15; 

3)reduce 个数并不是越多越好

(1)过多的启动和初始化 reduce 也会消耗时间和资源;

(2)另外,有多少个 reduce,就会有多少个输出文件,如果生成了很多个小文件,那 么如果这些小文件作为下一个任务的输入,则也会出现小文件过多的问题;

在设置 reduce 个数的时候也需要考虑这两个原则:处理大数据量利用合适的 reduce 数; 使单个 reduce 任务处理数据量大小要合适;

2.2. 推测执行

mapred.reduce.tasks.speculative.execution (hadoop 里面的) 
hive.mapred.reduce.tasks.speculative.execution(hive 里面相同的参数,效果和 hadoop 里面的一样两个随便哪个都行)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值