MIT-6.824 MapReduce

概述

MapReduce是由JeffreyDean提出的一种处理大数据的编程模型,用户定义map和reduce函数,map函数处理原始数据生成一系列键值对中间数据,reduce函数并合相同key的键值对。编程

编程模型

整个计算过程输入的是键值对,输出的也是键值对。用户只须要提供两个函数分别是Map和Reduce。
好比要统计大数据文本中的词频,咱们能够写出以下的Map和Reduce函数:函数

map(String key, String value):
    // key: document name
    // value: document contents
    for each word w in value:
        EmitIntermediate(w, "1");
        

reduce(String key, Iterator values):
    // key: a word
    // values: a list of counts
    int result = 0;
    for each v in values:
        result += ParseInt(v);
    Emit(AsString(result));

map函数的参数key, value分别是文本名和文本内容,map函数提取文本的每一个单词,每一个单词生成一个<w, "1">的键值对。
reduce函数对这些键值对进行并和,产生最终的统计结果。大数据

实现

mapreduece
当用户程序调用MapReduce函数后,将会发生以下动做:code

  1. 用户输入的文件将被分红M份
  2. 集群中有一个master,其它的都是worker,总共有M个map任务和R个reduce任务(M和R由用户指定)。master负责将map和reduce任务分配给空闲的worker。
  3. 负责map任务的worker执行用户定义的Map函数,将中间键值对保存到本地,并分红R份,并将位置发送给master。
  4. 负责reduce任务的worker从master获得中间数据的位置,读取数据到本地,调用reduce函数。
  5. 全部map和reduce调用结束后MapReduce调用结束,返回用户程序。最终的结果应该是R个redcue生成的文件。一般这些文件做为下一个MapReduece的输入继续处理。

容错

worker failure:blog

  1. master周期性的ping worker,若是worker没有相应则标记该worker为failed
  2. 若是一个map任务如今worker A执行,可是失败了,后来在worker B执行。那么后面的Reduce worker从worker B读取中间数据。

master failure:
master只有一个,失败概率很小。能够终止MapReduce。pdo

参考资料

  1. https://pdos.csail.mit.edu/6.824/papers/mapreduce.pdf
  2. https://www.youtube.com/watch?v=WLad7CCexo8
相关文章
相关标签/搜索