MapReduce:

整个called job,每个map 每个reduce 调用called task

有许多worker servers上面有多个mapreduce,有一个主server组织整个计算

主server上有5000个input,发给不同的空闲worker机器

每次map调用emit时,worker进程都会把这个数据写入本地disk

每次调用reduce前,一个worker会和其它几千台server一一进行通信

reduce的结果写入文件集群server中的一个文件

目标:可以读任意worker的任何input

需要一个地方存input:GFS(分布式存储,大文件shard)一般放在和MR同个cluster上,快

master从GFS上找出input1所在的server,在这个server上 用mapreduce执行map(input1)操作

所以input → Map 这里是本地读取(如果没有就就近)

Map→output 也是本地存。【同台机器存的是每一行】

但是从map(的output)到reduce(的input)就需要网络,把它们发到一台机器上【因为reduce要的是每一列】

shuffle:从行转换成列

Map(k, v):拆分

// k:一般忽略;v:输入文本

split v into words

for each word in words:

emit(word, ‘1’)

// mapreduce会为每个给定的key调用reduce,以接收它的所有实例

Reduce(k, v):

//reduce根据这个key关联的所有map对应的值得到一个vector数组

emit(len(v))