1

我正在寻找一个可以并行计算 Java 作业的集群程序。我查看了 Rockscluster 和 Hadoop。使用 Rockscluster 的问题在于它需要 Unix 中的脚本来并行运行计算。但是,我想做的是用 Java 本身向工作人员发送工作,以便工作人员计算它们并返回值。这是因为我的工作是由许多不同的用户决定的,你不能在运行工作之前编写脚本。此外,使用 Hadoop 的问题在于它使用了 Map-reduce 工具,但我认为我的 Java 工作并没有从 Map-reduce 方案中受益。

我想要的很简单。我想将作业发送给工人(其他计算机节点)并接收结果。我发送给工人的所有工作都是独立的(所以我不必担心依赖 btw 工作。简单的工作)。另外,我想在Java 本身中实现这些并行化。当我向调度器发送多个作业时,我希望调度器设置队列并自动将一些作业发送到可用节点并将结果返回给用户。(我不需要像自己选择节点这样的花哨功能来发送作业......)

为了更好地解释,让我在下面举一个例子。假设有一个正在使用 Java 的 user1。他正在计算机的 main() 中进行三个计算。下面是他的代码。

`公共类Multiplecal {

public static void main(String[] args){
    Multiplecal calobj= new Multiplecal();
    int result1, result2, result3;
    result1=calobj.addtwo(5);
    result2=calobj.addthree(6);
    result3=calobj.addfour(7);
}
public int addtwo(int n){
    return (n+(n-1));
}
public int addthree(int n){
    return (n+(n-1)+(n-2));
}
public int addfour(int n){
    return (n+(n-1)+(n-2)+(n-3));
}

}`

但是,user1 想通过使用一些集群程序来获取 result1、result2、result3。如果存在一个名为 service 的 API,那么他的 main() 代码可能如下所示。

进口服务。*;

`公共类Multiplecal {

public static void main(String[] args){
    Multiplecal calobj= new Multiplecal();
    int result1, result2, result3;
    result1=service.send("Multiplecal", "addtwo", 5);
    result2=service.send("Multiplecal", "addthree", 6);
    result3=service.send("Multiplecal", "addfour", 7);
}

.... }`

服务 API 将每个(类名、方法名和输入参数)发送到并行程序管理器。然后并行程序管理器将这些作业分配给节点(工人)。由于workers已经有Multiplecal类,他们可以通过匹配服务API发送的类和方法来获得结果。当工作人员完成他们的工作时,他们会将结果返回给 user1。

我上面提到的只是我想要做的事情的大图。并行化的参数格式不必像上面那样。如果你知道一个很好的设置集群和并行化 Java 作业的软件,请给我你宝贵的建议。

谢谢

4

1 回答 1

0

那里有许多网格计算/集群中间件。你可能想看看JPPF (master/worker)、GridGain (map/reduce) 或HTCondor

于 2013-08-29T18:16:03.423 回答