Map-Reduce编程模型源于map和reduce函数,这些函数存在于函数语言中,如Lisp和Scheme可以追溯到很多年。
我记得大学(90年代初期),即便在那时我被告知Map-Reduce在可扩展性方面具有优势。
目前我们都知道Hadoop和来自Google的原始版本是从中复制的。 我想知道的是,“旧”函数语言中存在哪些选项可以在至少几个计算节点上进行Map-Reduce?
或者这些功能在纸上看起来不错,但在谷歌做之前没有人真正构建过这个功能吗?
答案 0 :(得分:8)
Map / Reduce是 data parallelism 的特例。
数据并行性(不仅仅是map
和fold
)广泛用于高性能计算语言和并行函数语言。谷歌和其他人已经为他们的用例构建了一个高度优化(受限制)的分布式编程模型,但是他们肯定完全了解其他地方的这项工作的起源和状态。
HPC语言,例如
和纯函数式语言,具有完整数据并行性:
都支持全数据并行编程模型,适用于分布式或多核系统。特别是,Chapel,Fortress和X10旨在为全球最大的计算机集群提供大规模可扩展性。许多其他语言支持并行映射和折叠的一些概念(例如Erlang,Clojure,Scala,F#)。
因此,Google肯定将数据并行性推广为map / reduce的基本形式,但这不是故事的结尾。