一、控制任务的Map数量
- 什么影响map数量
取决于:
- input文件个数
- input文件大小
- 集群设置的文件块大小(目前为128M, 可在hive中通过set dfs.block.size;命令查看到,该参数不能自定义修改)
- 如何减少map数
#分割块大小为100M
set mapred.max.split.size=100000000;
#
set mapred.min.split.size.per.node=100000000;
#
set mapred.min.split.size.per.rack=100000000;
#这个参数表示执行前进行小文件合并
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
- 如何增加map数
#
set mapred.map.tasks=10;
二、控制任务的reduce数量
hive.exec.reducers.bytes.per.reducer(每个reduce任务处理的数据量,默认为1000^3=1G)
hive.exec.reducers.max(每个任务最大的reduce数,默认为999)
计算reducer数的公式很简单N=min(每个任务最大的reduce数,默认为999,总输入数据量/每个reduce任务处理的数据量)
#每个reduce任务处理的数据量,默认为1000^3=1G,这里是(500M)
set hive.exec.reducers.bytes.per.reducer=500000000;
1. 控制hive任务中的map数和reduce数
map阶段作用
reduce阶段作用
理解了两个阶段的作用,就知道map个数,reduce个数对整个作业的作用,