资料
- 视频
- map-reduce 论文(可下载)
- 本节的内容
分布式系统
- 分布式系统即一组计算机协同的提供某种服务,比如大型网站的存储,MapReduce,p2p共享等。
- 分布式系统的目的是:
* 通过平行计算提高可用性
* 通过重复提高容错性
* 通过计算机的分离提高安全性
* 与真实情况下计算机之间的分离部署情况匹配(比如配合传感器工作的下位机和上位机) - 一致性,可用性,分区容错性,三者是分布式系统经典的话题,三者没有办法同时得到满足(比如,一致性和分区容错性需要依赖通信,在同样的基础上,在传递统一内容时增加额外内容可以增加通信的可靠性,但会使速度下降,减小了可用性)。
Map Reduce(MR)
- 对大量的数据进行大量的运算时,通常会使用多个计算机进行平行的计算,map reduce 使这个分布式的过程对程序员透明,程序员只需要关心 map reduce 中的特定步骤上执行的内容。
- 一个简单的 map reduce 流程如下
Abstract view of a MapReduce job -- word count
Input1 -> Map -> a,1 b,1
Input2 -> Map -> b,1
Input3 -> Map -> a,1 c,1
| | |
| | -> Reduce -> c,1
| -----> Reduce -> b,2
---------> Reduce -> a,2
1) input is (already) split into M files
2) MR calls Map() for each input file, produces set of k2,v2
"intermediate" data
each Map() call is a "task"
3) when Maps are don,
MR gathers all intermediate v2's for a given k2,
and passes each key + values to a Reduce call
4) final output is set of <k2,v3> pairs from Reduce()s
伪码如下
Word-count-specific code
Map(k, v)
split v into words
for each word w
emit(w, "1")
Reduce(k, v_set)
emit(len(v_set))
- MR 将输入切分为 M 个文件
- MR 对每个文件调用 map 中的逻辑,产生 M 个形如 <key, value> 的中间结果
- Mr 将中间结果中 key 值相同的元组作为一组,传递给 reduce 逻辑
- reduce 将输出形如 <key, group_value> 的结果。reduce 输出的结果大多时候也是一组结果。(如果需要输出一个结果,使 map 产生的所有中间结果具有同一个 key 值)
接下来……
map reduce 的大致过程如上,关注一下下面的问题(都可以在论文中找到)
- map,reduce 间输入和输出的传递如何进行。
- 在 2004 年,限制 map reduce 处理能里的是网络带宽,主要涉及到对 GFS 的 io。
- 为了减轻对网络带宽的使用,map 在存有输入文件分片的计算机上进行,其 io 都是在本地硬盘上进行的。这样进行 reduce 的计算机就需要通过 GFS 通过网络,得到 map 计算机本地的文件。
- 如果一个计算机在处理 map 任务之后崩溃了会怎样,如果是在处理任务时呢,如果是处理 reduce 的计算机呢。
go 教程
推荐 go 的官方教程:
Go 语言之旅