Simple Java Map/Reduce Framework [已关闭]

2022-08-31 22:09:42

任何人都可以向我指出一个简单的,开源的Map/Reduce框架/Java API吗?似乎没有多少证据表明这样的事情存在,但其他人可能知道不同。

当然,我能找到的最好的是Hadoop MapReduce,但这不符合“简单”的标准。我不需要运行分布式作业的能力,只需要让我在多核机器上,在单个JVM中使用标准的Java5风格并发运行map/reduce风格的作业。

写自己并不难,但我宁愿不必写。


答案 1

你看过阿卡吗?虽然 akka 实际上是一个基于分布式 Actor 模型的并发框架,但您只需很少的代码即可实现很多东西。将工作分成几部分非常容易,它会自动充分利用多核机器,并能够使用多台机器来处理工作。与使用线程不同,它对我来说感觉更自然。

我有一个使用akka的Java map reduce示例。这不是最简单的地图减少示例,因为它利用了期货;但它应该让你大致了解所涉及的内容。我的 map reduce 示例演示了几件主要的事情:

  • 如何划分工作。
  • 如何分配工作:akka有一个非常简单的消息传递系统,作为一个工作分工,你可以配置它的时间表。一旦我学会了如何使用它,我就停不下来了。它是如此简单和灵活。我立即使用了所有四个CPU内核。这对于实现服务非常有用。
  • 如何知道工作何时完成,结果何时准备好处理:除非您已经熟悉期货,否则这实际上是最难理解和最令人困惑的部分。您不需要使用期货,因为还有其他选择。我只是使用它们,因为我想要一些更短的东西让人们摸索。

如果您有任何疑问,StackOverflow实际上有一个很棒的akka QA部分。


答案 2

我认为值得一提的是,这些问题是Java 8的历史。例如:

int heaviestBlueBlock =
    blocks.filter(b -> b.getColor() == BLUE)
          .map(Block::getWeight)
          .reduce(0, Integer::max);

换句话说:单节点MapReduce在Java 8中可用

有关更多详细信息,请参阅 Brian Goetz 关于 lambda 项目的演示文稿


推荐