深入浅出分布式【MapReduce】 (MIT 6.824)
2015-02-16 17:08
246 查看
概述
大名鼎鼎的MapReduce,作为MIT 6.824课程的入门级材料,实在是给了不少人学下去的动力(比如我自己…)。什么是MapReduce?简而言之,它是一种计算模型。这种计算模型将一个任务的计算分为了Map和Reduce两个阶段(好像什么都没讲…),每个阶段都有若干个Worker执行相同的Map或者Reduce函数,而这两个函数都是用户自己定义的。其中,Map函数的输入值为一对Key/Value Pair,并输出一个过渡状态下(intermediate)的Key/Value Pair的集合。MapReduce库会自动将那些具有相同的intermediate Key的Value再次组合在一起。而Reduce函数的输入就是这个intermediate Key及其对应的Value列表,大多数情况下,用户定义的Reduce函数会将列表中的这些Value再次处理下(比如统计个数、最值等),并返回处理后的值。
这样说可能还是有点抽象。我们以最经典的Word Count为例,该任务是要统计给定的一些文章中每个Word出现的次数。在MapReduce模型下,用户所需提供的Map函数大致会是这样
map (String key, String value): // key: Document name // value: Document contents for each word w in value: EmitIntermediate(w, 1) reduce (String key, List values): // key: a word // values: a list of 1 Emit(len(values))
其运行流程如下:
若干个Worker被分配了Map任务,不同的Key保证了每个Worker读取的文件并不一样。Map任务中,针对一片文章(Value)的每个词w,该函数都会输出一个过渡状态的键/值对{w: 1};
在全部Worker的Map任务都结束后,MapReduce库通过某种神奇的手段将每个过渡态的Key w所对应的Value都组合在了一起。这样,假设foo这个词在全部输入文档中出现了n次,我们就会得到一个{‘foo’:[1,1,⋯,1]}的过渡态Key/List Pair。其中[1,1,⋯,1]的长度为n;
随后,若干个Worker又会被分配了Reduce任务。Reduce函数的输入便是步骤2里的Key/List Pair。此例中我们关心的只是一个词出现的次数,也即List的长度,因此Map中输出的键/值对中具体是什么值其实并没有很大影响(1可以替换为其他任何值)。Reduce函数会输出它针对该Key所得到的最终的计算结果。
最后,MapReduce库再将每个过渡Key及其对应的Reduce结果整合在一个文件中并返回给用户。
说了用户使用的方法,然而作为分布式系统设计的学习者,我们显然不会仅局限在使用的层面上。那么MapReduce究竟是如何实现的呢?我个人认为,理解了下面这张图,MapReduce的基本原理也就差不多了。
我们可以看到,这是一个非常典型的Master-Worker结构(这种结构我们在之后还会经常遇到):一台Master服务器充当决策者,给各个空闲的Worker分配任务,并实时监控它们的状态。
鉴于Jeff Dean的这篇文章实在太经典,且网上大牛们写的MapReduce的资料实在太充足,在这里我只想简单的翻译下原文关于MapReduce流程的叙述,以免班门弄斧…
MapReduce库首先会将输入
相关文章推荐
- mit 6.824 mapreduce
- MIT 分布式系统 6.824 2012 LAB4
- MIT 6.824 分布式系统导论: lab5 Persistence实现设计
- MIT6.824 Lab1 MapReduce
- [MIT 6.824 Distributed System] Lab 1: MapReduce (2016)
- MIT6.824 分布式系统 lab1
- 分布式系统MIT 6.824学习资源
- MIT 6.824 Lab1 mapreduce
- 分布式系统MIT6.824设计详解
- MIT6.824-lec1 MapReduce
- MIT 6.824: 分布式系统实验
- hadoop(五) - 分布式计算利器MapReduce加强
- 大数据时代之hadoop(五):hadoop 分布式计算框架(MapReduce)
- 高可用,完全分布式Hadoop集群HDFS和MapReduce安装配置指南
- mapreduce分布式缓存
- MapReduce生成HFile文件,再使用BulkLoad导入HBase中(完全分布式运行)
- [Hadoop]MapReduce编程---分布式grep的实现
- 海量数据处理---分布式处理之MapReduce
- 基于HBase Hadoop 分布式集群环境下的MapReduce程序开发
- 分布式计算框架mapreduce