zoukankan      html  css  js  c++  java
  • [MapReduce_4] MapTask 并发数的决定机制


    0. 说明

      介绍 && Map 个数 & Reduce 个数指定 && Map 切片计算


    1. 介绍

      一个 job 的 Map 阶段并行度由客户端在提交 job 时决定

      客户端对 Map 阶段并行度的规划基本逻辑为:

      1. 将待处理的文件进行逻辑切片(根据切片大小,逻辑上划分多个 split ),然后每一个 split 分配一个 MapTask 并行处理实例

      2. 具体切片规划是由 FileInputFormat 实现类的 getSplits()方法 完成


    2. Map 个数 & Reduce 个数指定

      Map个数指定:

    1. 根据文件个数指定
    2. 根据压缩文件可切割性

      Reduce个数指定:

    job.setNumReduceTasks(3);

     3. Map 切片计算

      【3.1 通过文件类型判断是否可切片】

      判断文件类型(是否可切割),通过文件名后缀的反转来进行编解码器的判断

    1. 无压缩编解码器 // 可切割
    2. 可切割的压缩编解码器 // 可切割
    3. 不可切割的压缩编解码器 // 不可切割,切片大小即文件大小 

      SequenceFile
      可切割,无论用什么压缩方式,或压缩编解码器

      【3.2 切片计算】

      最大切片值(MaxValue):  Long.MAX_VALUE

      最小切片值(MinValue):  1

      块大小(BlockSize ):     32M(本地模式) 128M(分布式)


      切片计算

    Math.max(MinValue , Math.min(MaxValue,BlockSize));

      通过设置最大切片值和最小切片值确定切片大小

    // 设置最大切片大小
    FileInputFormat.setMaxInputSplitSize(job,100);
    
    // 设置最小切片大小
    FileInputFormat.setMinInputSplitSize(job,100);    

      【3.3 总结逻辑切割】

      1、先进行数据切片,切片结果保留在 temp 下,job.split,里面存有切片数据偏移量索引

      2、每个 Map 通过此索引来计算属于自己的切片数据

      


  • 相关阅读:
    LightOJ 1094
    hdu 2586
    hdu 5234
    hdu 2955
    LightOJ 1030 数学期望
    poj 1273
    CodeIgniter学习笔记(十五)——CI中的Session
    CodeIgniter学习笔记(十四)——CI中的文件上传
    CodeIgniter学习笔记(十三)——CI中的分页
    CodeIgniter学习笔记(十二)——CI中的路由
  • 原文地址:https://www.cnblogs.com/share23/p/9779557.html
Copyright © 2011-2022 走看看