林子豪的 PKM
← 返回 Blog

map reduce

An overview of the MapReduce distributed computing model based on the original Google paper. This post covers the MapReduce workflow, master-worker architecture, fault tolerance mechanisms, and optimization techniques like data locality and backup tasks. It also addresses common questions about task granularity and failure handling in MapReduce systems.

1 min read系列 · distributed-systems
distributed-system

map reduce论文

https://pdos.csail.mit.edu/6.824/papers/mapreduce.pdf

map reduce流程

- fork创造出很多个worker和一个master

- input被分成m份,master把map/reduce任务分配给worker

- worker把input输入到map函数,输出放在memory

- 过一段时间,memory中的intermediate内容partition成R分存在硬盘,并把位置告诉master

- reducer iterate的读取intermediate的内容

master需要储存的内容

- 每一个map/reduce task的状态(idle,in-progress,fail,success)

- 每一个worker的id

- intermediate file的位置和大小

fault tolerance

worker failure

- master定时向worker发送心跳

- worker没有响应,把worker completed的map task改成idle

- 把in-progress的reduce task改成idle

Q:为什么completed的map task还要重做?

A:因为map的输出intermediate file是放在local disk的。而reduce的输出是放在global file system的

Q:reduce task正在做的过程中,有一个intermediate file要重做,怎么办?

master filure

- master定时把状态写出来作为checkpoint

- 当master死了,可以从checkpoint的数据重建一个master继续做

Q:nondeterministic的任务重试有什么影响?

input一般是放在map reduce集群上的分布式文件系统

master在分配任务的时候,要考虑文件的位置,尽量分配本地input给worker做

task granularity

一般来说M和R越大越好

- 有例如failure之后的重做

- load balance优势

M和R的瓶颈

master需要分配O(M + R)的task,保存intermediate file位置需要O(M * R)

一般分配之后,一个input的大小大概是16MB到64MB,根据分布式文件系统的block size决定,优化locality。

R的大小一般是业务需求决定

当差不多结束的时候,每一个in-progress的任务叫多几个worker来做,这种叫做backup task。

combiner

如果reduce的输入是一个monoid,可以用combiner,一般跟reducer是同一个函数,不过是在map完之后跑,跑完的结果输出到local disk