一、控制任务的Map数量

  1. 什么影响map数量

取决于:

  1. input文件个数
  2. input文件大小
  3. 集群设置的文件块大小(目前为128M, 可在hive中通过set dfs.block.size;命令查看到,该参数不能自定义修改)
    1. 如何减少map数
  1. #分割块大小为100M
  2. set mapred.max.split.size=100000000;
  3. #
  4. set mapred.min.split.size.per.node=100000000;
  5. #
  6. set mapred.min.split.size.per.rack=100000000;
  7. #这个参数表示执行前进行小文件合并
  8. set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
  1. 如何增加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个数对整个作业的作用,

2. hive SQL解析过程

3. hive中join原理和机制