hive中map与reduce的个数问题

目的:为了整理自己的思路,基本上都是从大佬那里截取的

一:hive的map数量

  1. 一般情况下,是按照hdfs的数据块大小来决定,默认是128M,也就是被读取的文件整除128M之后的个数,例:128M就是一个map,129M就是两个map
  2. 按照1.中的思路,可能会出现一种状况,大量的小文件,会导致大量的map,但实际的数据量却没有那么多,造成资源浪费
    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; # 执行前进行小文件合并
  3. 适当增加map数:当input的文件都很大,任务逻辑复杂,map执行非常慢的时候,可以考虑增加Map数,来使得每个map处理的数据量减少,从而提高任务的执行效率。
Select data_desc,
                count(1),
                count(distinct id),
                sum(case when …),
                sum(case when ...),
                sum(…)
        from a group by data_desc
这样就可以用多个map任务去完成。
                   set mapred.reduce.tasks=10;
                   create table a_1 as 
                   select * from a 
                   distribute by rand(123); 

  

结束

原文地址:https://www.cnblogs.com/youchi/p/13550019.html