分布式系统-1-MapReduce

在开篇 分布式系统-0-知识架构 我们介绍了分布式系统的背景和需要解决的问题。从本篇开始就要正式开始介绍分布式了。

在 MapReduce 这篇论文中,举了一个词频统计的例子,就是给你一段英文,返回文中出现的每个单词及其数目。巧豆一麻袋,这个不是我们刚学编程时的练习题目吗?要是用 ruby、python 的话,一行代码就够了呀,大名鼎鼎的 MapReduce 只能干这事啊,我不想学了,太菜。但思考一下如果是 TB 级别的数据,50台机器,一行代码当然也是可以的,但是,只能用一台机计算,并且要负责机器间的数据复制还得处理部分机器失败后计算结果的完整性。可见一行代码显然是不行的。而 MapReduce 就是 Google 处理大量网页数据中总结出来的多机并发算法。

我们开篇中提到分布式要在保证一致性的基础上尽量提高并发最好还能让业务程序省心。在 MapReduce 中 Map 和 Reduce 从算法层面限制了每个任务的唯一性,任务执行是幂等的,所以 master 处理 worker 失败的方式就是将失败的任务给另一个空闲的 worker 去做。master 默认是不会 crash 的,当然这不可能,master 容错会接下来的文章中介绍。

所以你看,鱼和熊掌不可兼得,想简化一致性问题,付出的代价就是限制任务的类型。但是这种实践中总结的经验对后来分布式系统影响深远,为何 MapReduce 经得起考验?因为简单到更接近真理。

想实践一下 MapReduce?我们还准备了一个实验项目,欢迎来战。

你可能感兴趣的:(分布式系统-1-MapReduce)