• 019_Map Task数目的确定和Reduce Task数目的指定


    注意标题:Map Task数目的确定和Reduce Task数目的指定————自然得到结论,前者是后者决定的,后者是人为指定的。查看源码可以很容易看懂

    1、MapReduce作业中Map Task数目的确定:  

    1)MapReduce从HDFS中分割读取Split文件,通过Inputformat交给Mapper来处理。Split是MapReduce中最小的计算单元,一个Split文件对应一个Map Task
    2)默认情况下HDFS种的一个block,对应一个Split。
    3)当执行Wordcount时:
       (1)一个输入文件小雨64MB,默认情况下则保存在hdfs上的一个block中,对应一个Split文件,所以将产生一个Map Task。
       (2)如果输入一个文件为150MB,默认情况下保存在HDFS上的三个block中,对应三个Split文件,所以将产生三个Map Task。
       (3)如果有输入三个文件都小于64MB,默认情况下会保存在三个不同的block中,也将产生三个Map Task。
    4)用户可自行指定block与split的关系,HDSF中的一个block,一个Split也可以对应多个block。Split与block的关系都是一对多的关系。
    5)总结MapReduce作业中的Map Task数目是由:
       (1)输入文件的个数与大小
       (2)hadoop设置split与block的关系来决定。

    2、MapReduce作业中Reduce Task数目的指定:  

    1)JobClient类中submitJobInternal方法中指定:int reduces=jobCopy.getNumReduceTasks();

    2)而JobConf类中,public int getNumReduceTasks(){return geInt("mapred.reduce.tasks",1)}
    因此,Reduce Task数目是由mapred.reduce.tasks指定,如果不指定则默认为1.
    这就很好解释了wordcount程序中的reduce数量为1的问题,这时候map阶段的partition(分区)就为1了。

  • 相关阅读:
    .NET的DTO映射工具AutoMapper
    使用TeamCity对项目进行可持续集成管理
    SpecFlow
    重构--改善既有代码的设计
    EntityFramework 7 开发纪录
    Solr索引
    DDD分层架构之值对象(层超类型篇)
    C#异步Socket示例
    Cnblogs API
    白鸦三次创业反思:公司遇问题 怎么走都对(转)
  • 原文地址:https://www.cnblogs.com/xiangyangzhu/p/5278328.html
Copyright © 2020-2023  润新知