在 Erlang 中实现 MapReduce 框架

Implementing a MapReduce skeleton in Erlang

我对并行编程和 Erlang 语言都很陌生,有点吃力。

我很难实现 mapreduce 框架。我生成了 M 个映射器(它们的任务是将幂函数映射到浮点数列表)和 R 个缩减器(它们对映射器发送的输入列表的元素求和)。

然后我想做的是将每个映射器的中间结果发送到一个随机化简器,我该如何 link 将一个映射器发送到化简器? 我在互联网上四处寻找示例。我能找到的最接近我想做的事情是 this word counter example,作者似乎找到了一种聪明的方法来 link 将映射器映射到 reducer 并且逻辑是有道理的,但是我没有能够调整它以满足我的特殊需求。也许键值实现不适合查找权力列表的总和?

有什么帮助吗?

只是为了提供更新,显然 OP 中链接的算法存在问题。看起来同步协议有问题,存在对 sleep() 函数的调用(即它不应该存在)暗示了这一点。

要获得 map/reduce 框架的良好工作实现,请参阅《Erlang 编程》一书(第 2 版)中 Joe Armstrong 的版本。

Armstrong 的版本只使用一个reducer,但可以很容易地修改为更多的reducer 以消除瓶颈。 我还添加了一个函数来将输入列表分成块。每个映射器都会得到一大块数据。