代码执行的并行化/集群选项

时间:2011-01-26 14:34:01

标签: scala java-ee architecture mapreduce cluster-computing

我来自java背景并且遇到了CPU限制问题,我正在尝试并行化以提高性能。我已经将我的代码分解为以模块化方式执行,以便它可以以并行方式分发和运行(希望如此)。

@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
public void runMyJob(List<String> some params){
  doComplexEnoughStuffAndWriteToMysqlDB();
}

现在,我一直在考虑以下选项来并行化这个问题,我想了解这个领域人们的想法/经验。

我目前正在考虑的选项:

1)使用Java EE(例如JBoss)集群和MessageDrivenBeans。 MDB位于群集中的从属节点上。每个MDB都可以选择一个如上所述开始工作的事件。 AFAIK Java EE MDB由应用服务器进行多线程处理,因此希望能够利用多核。因此,它应该是垂直和水平可扩展的。

2)我可以看一下像Hadoop和Map Reduce这样的东西。我在这里担心的是我的工作处理逻辑实际上是相当高的水平,所以我不确定Map Reduce的可译性。另外,我是MR的新手。

3)我可以看看像Scala这样的东西,我认为这使得并发编程变得更加简单。但是,虽然这是可垂直扩展的,但它不是集群/水平可扩展的解决方案。

无论如何,希望所有这些都有意义,非常感谢你提供的任何帮助。

2 个答案:

答案 0 :(得分:0)

您正在寻找的解决方案是Akka。聚类是一个正在开发的功能,通常会包含在Akka 2.1

  • 优秀的Scala和Java Api,非常完整
  • 纯粹面向消息的模式,没有共享状态
  • 防错和可扩展
  • 非常容易分发工作

如果你还准时,请摆脱J2EE。非常欢迎您加入Akka邮件列表来提出您的问题。

答案 1 :(得分:0)

你应该看看spark。 它是一个用Scala编写的集群计算框架,旨在成为Hadoop的可行替代方案。 它有许多不错的功绩:

  • 内存中计算:您可以控制缓存程度
  • Hadoop输入/输出互操作性:Spark可以从所有Hadoop输入源(如HDFS,EC2等)读取/写入数据。
  • “弹性分布式数据集”(RDD)的概念,它允许您像在本地一样在群集上并行直接执行大多数MR样式的工作负载
  • 主API = Scala,可选的python和Java API
  • 它使用Akka:)

如果我理解你的问题,Spark会把你的选择2)和3)结合起来。