Contents

MIT 6.824 Lec1 分布式:MapReduce

Introduction

paper url: http://nil.csail.mit.edu/6.824/2020/papers/mapreduce.pdf

Why need distributed

  • parallelism
  • fault tolerance
  • physical
  • security or isolated

Basic challenges

  • concurrency
  • partial failture
  • performence

Map Reduce

个人理解

MapReduce是一个比较直观而且可以分布式的编程框架,主要过程就是将数据(输入)分发到不同的task(map过程),然后将所有task的输出收集起来shuffle一下,然后分发给另外的task(reduce过程)。从目前(2021年)来看,这个编程模型的瓶颈应该是中间的shuffle过程,因为数据量非常大的时候,shuffle过程的网络IO量也非常大。

关键点

MapReduce的编程模型很简单,但Google的论文中最有价值的部分是应该是关于容错和任务备份。

容错

Worker容错

每个Task可以分为三个状态,idle/in-progress/completed,当task被分配给worker后,会由idle变为in-progress状态,当worker正常完成task时,会由in-progress变为completed。 当worker因意外或其他原因变得inavaible时,Task将会变成idle状态,然后master就可以将其重新分配给其他worker去完成。

Master容错

Master的错误比较暴力,直接做几个mirror就行了,如果没有mirror,那么当master出错时,整个系统就会宕机。

任务备份

个人觉得是论文里一个不错的点,任务备份是当一个MapReduce操作(个人理解就是map和reduce)完成时,将当前in-progress的Task备份,然后当有空闲的worker时再将备份中的task分配过去执行。这样的好处是可以明显减少因为straggler的存在而导致的性能下降。

straggler指因为磁盘、网络等原因而造成性能下降的Worker

personal idea

因为在实际情况中,每个Worker都会因为各种因素而产生性能上的差距。同时,Master中也记录了每个task的完成时间,感觉可以用完成时间的平均值(或者之类的)来将worker放到一颗平衡树里面,然后优先用效率高的worker去完成task。