zoukankan      html  css  js  c++  java
  • 4. MapReduce

    1. 来源和特点
        源自于Google的MapReduce论文 :  
        发表于2004年12月
        Hadoop MapReduce是Google MapReduce克隆版

        特点:
        易于编程
        良好的扩展性
        高容错性
        适合PB级以上海量数据的离线处理 

        不擅长的方面:
        实时计算
          像MySQL一样,在毫秒级或者秒级内返回结果
        流式计算
          MapReduce的输入数据集是静态的,不能动态变化
          MapReduce自身的设计特点决定了数据源必须是静态的(为了容错性)
        DAG计算
          多个应用程序存在依赖关系,后一个应用程序的输入为前一个的输出

    2. MapReduce 过程分析  —— wordcount 

     1. Input : 一系列key/value对
        用户提供两个函数实现:map(k,v) --> list(k1,v1) ; reduce(k1,list(v1)) --> v2
     2. output: (k2, v2)

    详细见下图:


    具体组件:
    1. InputFormat :
    文件分片(InputSplit)方法
      处理跨行问题
    将分片数据解析成key/value对
      默认实现是TextInputFormat
    TextInputFormat
      Key是行在文件中的偏移量,value是行内容
      若行被截断,则读取下一个block的前几个字符



    2. Split 与 Block :
    Block
      HDFS中最小的数据存储单位,默认是64MB
    Spit
      MapReduce中最小的计算单元
      默认与Block一一对应
    Block与Split
      Split与Block是对应关系是任意的,可由用户控制

    3. Combiner  (local reduce)

     Combiner可做看local reducer
       合并相同的key对应的value(wordcount例子)
       通常与Reducer逻辑一样
     好处
       减少Map Task输出数据量(磁盘IO)
       减少Reduce-Map网络传输数据量(网络IO) 

    4. Partitioner
        Partitioner决定了Map Task输出的每条数据交给哪个Reduce Task处理 
     默认实现:hash(key) mod R
       R是Reduce Task数目,允许用户自定义
     很多情况需自定义Partitioner
      比如“hash(hostname(URL)) mod R”确保相同域名的网页交给同一个Reduce Task处理

    5. 总结
    Map阶段
      InputFormat(默认TextInputFormat)
      Mapper
      Combiner(local reducer)
      Partitioner
    Reduce阶段
      Reducer
      OutputFormat(默认TextOutputFormat
          





  • 相关阅读:
    BZOJ4240 有趣的家庭菜园(贪心+树状数组)
    BZOJ4241 历史研究(莫队)
    BZOJ4237 稻草人(分治+树状数组+单调栈)
    BZOJ4236 JOIOJI
    洛谷 P3765 总统选举 解题报告
    洛谷 P1903 [国家集训队]数颜色 解题报告
    洛谷 P4514 上帝造题的七分钟 解题报告
    洛谷 P3302 [SDOI2013]森林 解题报告
    洛谷 P3437 [POI2006]TET-Tetris 3D 解题报告
    洛谷 P4008 [NOI2003]文本编辑器 解题报告
  • 原文地址:https://www.cnblogs.com/51runsky/p/fa4edf8bf3387103685eff494981daad.html
Copyright © 2011-2022 走看看