MapReduce 的缺点

在 DP 中有了 MapReduce 框架,为什么还要提出新的 DP 框架?我觉得这是因为 MapReduce 有两点缺陷:

比较好理解的一点是,MapReduce 是一种专门为了高吞吐开发的无迭代算法。这就导致了两个特点,一个是数据量非常大(数据量大了吞吐才能高),需要存在 disk 里面;另一个是如果并行算法需要迭代,比如说 Page Rank 这样的算法,那么重复启动开销也会很大。

不过上面提到的这一点,其实并不影响 MapReduce 的抽象,我们完全可以实现一个在内存中,多轮迭代的框架,依然沿用 MapReduce 的抽象。MapReduce 真正的问题在于,它的抽象过于宏观全局了。

我们在使用 MapReduce 的时候,尤其是在 map 函数中的时候,是真的会意识到自己是“面对一堆数据,然后全局式的完成映射”。这种视角就非常全局(类似于要看见一个线程池),一点也不局部(专注于每个线程的逻辑)。

BSP

BSP(Bulk Synchronous Parallel)就是一种新的抽象架构,它是为图算法开发的,可以多轮迭代,而且是以 vertex 为视角进行开发。