Map个数

作者: 大闪电啊 | 来源:发表于2018-12-14 11:23 被阅读0次

Map任务的个数

Mapper数据过大的话,会产生大量的小文件,过多的Mapper创建和初始化都会消耗大量的硬件资源
Mapper数太小,并发度过小,Job执行时间过长,无法充分利用分布式硬件资源

Mapper数量由什么决定

  • 输入文件数目
  • 输入文件的大小
  • 配置参数
    这三个因素决定的。

最简单的配置
conf.setNumMapTasks(int num)方法来手动地修改map个数。但是这个方法能够用来增加map任务的个数,但是不能设定任务的个数小于Hadoop系统通过分割输入数据得到的值

输入的目录中文件的数量决定多少个map会被运行起来,应用针对每一个分片运行一个map,一般而言,对于每一个输入的文件会有一个map split。如果输入文件太大,超过了hdfs块的大小(128M)那么对于同一个输入文件我们会有多于2个的map运行起来。

涉及参数:
mapreduce.input.fileinputformat.split.minsize //启动map最小的split size大小,默认0
mapreduce.input.fileinputformat.split.maxsize //启动map最大的split size大小,默认256M
dfs.block.size//block块大小,默认128M

计算公式:splitSize = Math.max(minSize, Math.min(maxSize, blockSize))

下面是FileInputFormat class 的getSplits()的伪代码:

      num_splits = 0
      for each input file f:
         remaining = f.length
         while remaining / split_size > split_slope:
            num_splits += 1
            remaining -= split_size
      where:
        split_slope = 1.1 分割斜率
        split_size =~ dfs.blocksize 分割大小约等于hdfs块大小

会有一个比例进行运算来进行切片,为了减少资源的浪费
例如一个文件大小为260M,在进行MapReduce运算时,会首先使用260M/128M,得出的结果和1.1进行比较
大于则切分出一个128M作为一个分片,剩余132M,再次除以128,得到结果为1.03,小于1.1
则将132作为一个切片,即最终260M被切分为两个切片进行处理,而非3个切片。

看完以上,修改minSize没有起到效果,最主要的是map数据读取不能跨文件,最小的map个数为文件个数。但这只是针对于text文件格式,orcfile待测试

hive 中修改Map个数

如果表a只有一个文件,大小为120M,但包含几千万的记录,如果用1个map去完成这个任务,肯定是比较耗时的,这种情况下,我们要考虑将这一个文件合理的拆分成多个

set mapred.reduce.tasks=10;
create table a_1 as
select * from a
distribute by rand(123);

相关文章

  • Map个数

    Map任务的个数 Mapper数据过大的话,会产生大量的小文件,过多的Mapper创建和初始化都会消耗大量的硬件资...

  • MapReduce中的map个数

    准确的说,map个数是指map task的个数,map task可以看作进程,并发执行一个job任务。 在map阶...

  • 2018-10-10

    /* * Map对象,实现Map功能 * * * size() 获取Map元素个数 * isEmpty() 判断M...

  • Hive5:Hive优化

    Map优化 通过调整脚本的参数来设置map的个数,和设置block大小,block是影响map个数的关键因素 直接...

  • map 和 flatMap

    基本概念 map 和 flatMap 这两兄弟转文负责将 “一个数组 转化为 另外一个数组”。 map map函数...

  • Hive 任务卡在 map = 0%, reduce = 0%

    Hive 卡在map = 0%, reduce = 0%阶段 解决:增加map个数,设置mapreduce.in...

  • hive设置map和reduce数量

    如何设置map个数 在hive中没有办法直接设置map个数,但是可以通过设置一个map处理的最大数据量,来设置ma...

  • Leetcode.347.Top K Frequent Elem

    题目 给定一个数组,输出出现频率最多的K个数。 思路 先用map计算每个数的出现频率,将map转化为数组进行倒序排...

  • Flink Operators 实战基础篇

    返回 DataStream Transformations基础 Map 定义 说明 利用map方法对每个数据进行一...

  • es6 — map2 - 2019-01-10

    2019-01-10 创建 Map 属性 size返回Map结构的成员个数 Map方法 1. set(key, v...

网友评论

      本文标题:Map个数

      本文链接:https://www.haomeiwen.com/subject/cmwwhqtx.html