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

  • 相关阅读:
    [HAOI2012]高速公路(BZOJ2752)
    [SHOI2008]堵塞的交通traffic(BZOJ1018)
    AHOI2009 行星序列Seq (BZOJ1798)
    java注解问题
    回调方法举例
    log4j将日志文件保存到项目中
    ehCache+springMVC的简单实用
    MyBatis排序时使用order by 动态参数时需要注意,用$而不是#
    mybatis配置log4j
    mybatis ---- 分页 (拦截器)
  • 原文地址:https://www.cnblogs.com/xiangyangzhu/p/5278328.html
Copyright © 2011-2022 走看看