3.控制hive map reduce个数

参考:
https://blog.csdn.net/wuliusir/article/details/45010129
https://blog.csdn.net/zhong_han_jun/article/details/50814246

1.split的计算方式:

splitsize = max(splitsize,min(blocksize,filesize/NUMmaps))
NUMmaps即为默认的map数,默认为1,也就是说最大的splitsize为文件的大小。

2.不同的hive.input.format时map个数

hive 的split size在使用不同的input format时依赖的参数不同。

  • hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat
    此时由以下三个参数控制
mapred.max.split.size  #控制最大split
mapred.min.split.size.per.node #控制最小split,优先级低
mapred.min.split.size.per.rack #控制最小split,优先级高
  • hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat
    此时由
mapred.min.split.size
mapred.map.tasks #可以忽略,默认为1

在做split时,不如一个split的数据也会放到一个map执行,如果splitsize 128m,文件150m,则会有两个map,一个128m,另外一个22m,这样两个map执行的时间就不一样了

注意
把mapred.min.split.sizemapred.min.split.size.per.node 从128M增加到256M,可能并不会降低map数,这时需要增大数值,一边增加一边测试

3.reduce个数

reduce可以通过设置set mapred.reduce.tasks=100来指定个数,或者指定reduce计算的数据,set hive.exec.reducers.bytes.per.reducer=1073741824

以下是个样例:

set mapred.max.split.size=1024000000;
set mapred.min.split.size.per.node=512000000;
set mapred.min.split.size.per.rack=512000000;
set mapreduce.task.io.sort.mb=200;
set hive.exec.parallel.thread.number=1  ;
set mapred.reduce.tasks = 314;
set mapreduce.map.memory.mb=1024;
set mapreduce.task.io.sort.factor=50;




原文地址:https://www.cnblogs.com/skyrim/p/10314197.html