zoukankan      html  css  js  c++  java
  • 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); 
    

      

    结束

  • 相关阅读:
    jwt原理
    图书管理系统后端
    图书管理系统前端
    图书管理前端页面
    Linux多任务: exec 和fork()的联用
    CPU 字长与存储器位宽不一致处理
    关键字volatule
    linux C 中断程序:利用队列保存中断类型
    Linux下的Make与Makefile
    C :assert() 的用法
  • 原文地址:https://www.cnblogs.com/youchi/p/13550019.html
Copyright © 2011-2022 走看看