Map Reduce编程模型源于Map和Reduce函数,这些函数存在于Lisp和Scheme等函数语言中,可以追溯到许多年前。
我记得在大学里(90年代初),甚至在那时我就被告知Map Reduce在可扩展性方面具有优势。
目前,我们都知道Hadoop以及它从谷歌复制的原始版本。我想知道的是,在"旧"函数语言中有哪些选项可以在至少几个计算节点上执行Map Reduce?
或者,这是一个在纸面上看起来不错的功能,但在谷歌完成之前,没有人真正着手构建它吗?
Map/Reduce是数据并行性的一个特例。
数据并行(不仅仅是map
和fold
)在高性能计算语言和并行函数语言中被广泛使用。谷歌和其他公司已经为他们的用例构建了一个高度优化(受限)的分布式编程模型,但他们肯定完全知道这项工作在其他地方的起源和状态。
HPC语言,如
- 礼拜堂
- 要塞
- X10
- HPF
和纯函数式语言,具有完全的数据并行性:
- 哈斯克尔
- NESL
所有这些都支持分布式或多核系统的全数据并行编程模型。特别是,Chapel、Fortress和X10的目标是在世界上最大的计算机集群上实现大规模可扩展性。许多其他语言支持一些并行映射和折叠的概念(例如Erlang、Clojure、Scala、F#)。
因此,谷歌当然推广了数据并行性,其基本形式是map/reduce,但这还不是故事的结束。