hive-sql-map和reduce数量设置及决定因素

本文详细介绍了如何设置Hive SQL的map和reduce任务数量,包括map个数的简单设置、影响因素以及最终确定方式,强调了map数量不能超过输入文件个数。同时,讲解了reduce个数的设置,考虑了Hive的默认参数和数据量。最后提醒,过多的map和reduce任务会影响效率,过多的reduce会导致小文件问题。
摘要由CSDN通过智能技术生成

#1. map个数设置
##1.1 简单设置
mapred.map.tasks=n
通过这种方式设置map的个数,并不是每次都有效的。这个参数只是一个hadoop的参考数值,最终map的个数,还取决于其他的因素

##1.2 map数的影响因素
主要由以下三个参数决定
block_size:hdfs的文件块大小,可以通过参数dfs.block.size设置
total_size:输入文件整体的大小
input_file_num:输入文件的个数

###1.2.1 默认map个数(default_map_num)
如果不进行任何设置,默认的map个数:
default_map_num=total_size/block_size;

###1.2.2 期望map个数(expect_map_num)
可以通过参数mapred.map.tasks来设置期望的map个数,但是这个个数只有在大于default_num的时候,才会生效
expect_map_num = mapred.map.tasks;

###1.2.3 通过设置处理的文件大小来影响map个数(split_map_num)
通过如下参数设置每个task处理的文件大小,但是这个大小只有在大于block_size(dfs.block.size)的时候才会生效
mapred.min.split.size=大小

split_size= max(mapred.min.split.size, block_size);
split_map_num=total_size/split_size;

###1.2.4 最终map的个数(final_map_num)
final_map_num=min(split_map_num,max(default_map_num,expect_map_num))

##1.3 总结:
mapreduce遵循的原则:mapreduce的每一个map处理的数据是不能跨越文件的,也就是说max_map_num <= input_file_num
final_map_num = min(compute_map_num, input_file_num)

在设置map个数的时候,可以参考如下几点:
a. 如果想增加map个数,则设置mapred.map.tasks 为一个较大的值。
b. 如果想减小map个数,则设置mapred.min.split.size 为一个较大的值。
c. 如果输入中有很多小文件,依然想减少map个数,则需要将小文件merger为大文件,然后使用

#2. reduce个数设置
##2.1 简单设置
mapred.reduce.tasks = number
reduce个数的设定极大影响任务执行效率,不指定reduce个数的情况下,Hive会猜测确定一个reduce个数

##2.2 reduce数的影响因素
###2.2.1 reduce数的影响参数
hive.exec.reducers.bytes.per.reducer
每个reduce任务处理的数据量,在Hive-0.14.0版本之前默认值是1G(1000000000);而从Hive-0.14.0开始,默认值变成了256M(256000000)

hive.exec.reducers.max = number
每个任务最大的reduce数,在Hive-0.14.0版本之前默认值是999;而从Hive-0.14.0开始,默认值变成了1009

###2.2.2 reduce的最终数
final_reduce_num = min(hive.exec.reducers.max,总输入数据量/hive.exec.reducers.bytes.per.reducer)

#3. 其他注意点
a. map和reduce的个数并不是越多越好,启动和初始化reduce也会消耗时间和资源
b. 有多少个reduce,就会有多少个输出文件,如果生成了很多个小文件,那么如果这些小文件作为下一个任务的输入,则也会出现小文件过多的问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海阔天空_81

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值