Map-Reduce 编程模型源于 map 和 reduce 函数,这些函数存在于函数式语言(如 Lisp 和 Scheme)中可以追溯到很多年前。
我记得大学时(90 年代初),甚至在那时我就被告知 Map-Reduce 在可扩展性方面具有优势。
目前我们都知道 Hadoop 及其从 Google 复制而来的原始版本。 我想知道的是,“旧”函数式语言中存在哪些选项可以在至少几个计算节点上执行 Map-Reduce?
或者这是那些在纸面上看起来不错但在 Google 做到之前没有人真正开始构建的功能之一?
最佳答案
Map/Reduce 是 data parallelism 的特例.
数据并行性(不仅仅是 map
和 fold
)广泛应用于高性能计算语言和并行函数语言。 Google 和其他公司已经为他们的用例构建了一个高度优化(受限)的分布式编程模型,但他们肯定完全了解其他地方这项工作的起源和状态。
HPC 语言,例如
和纯函数式语言,具有完全的数据并行性:
所有这些都支持完整的数据并行编程模型,适用于分布式或多核系统。特别是,Chapel、Fortress 和 X10 旨在在世界上最大的计算机集群上实现大规模可扩展性。许多其他语言支持并行映射和折叠的某些概念(例如 Erlang、Clojure、Scala、F#)。
因此,Google 确实以 map/reduce 的基本形式普及了数据并行性,但这还没有结束。
关于functional-programming - 原始函数式语言中的 MapReduce 的可扩展性如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6087834/