我正在寻找一个可以并行计算Java作业的集群程序。我查看了Rockscluster和Hadoop。使用Rockscluster的问题在于它需要Unix中的脚本并行运行计算。但是,我想要做的是向Java中的工作人员发送作业,以便工作人员计算它们并返回值。这是因为我的工作由许多不同的用户决定,你不能在运行作业之前编写脚本。此外,使用Hadoop的问题在于它使用Map-reduce工具,但我认为我的Java作业没有从Map-reduce方案中受益。
我想要的很简单。我想将工作发送给工人(其他计算机节点)并收到结果。我发给工人的所有工作都是独立(所以我不必担心依赖btw工作。简单的工作)。另外,我想在 Java本身中实现这些并行化。当我向调度程序发送多个作业时,我希望调度程序设置队列并自动将一些作业发送到可用节点并将结果返回给用户。(我不需要像我自己选择节点那样的奇特功能发送作业...)
为了更好的解释,让我举一个例子。假设有一个user1正在使用Java。他正在计算机中的main()中进行三次计算。以下是他的代码。
`public class 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()代码可能如下所示。
导入服务。*;
`public class 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);
}
.... }`
Service API会将每个(classname,methodname和输入参数)发送到并行程序管理器。然后,并行程序管理器将这些作业分发给节点(工作者)。由于worker已经具有Multiplecal类,因此可以通过匹配从服务API发送的类和方法来获得结果。当工人完成工作时,他们会将结果返回给user1。
我上面提到的只是我想要做的事情的大局。并行化的参数格式不必如上所述。如果你知道一个设置集群和并行化Java作业的好软件,请给我你宝贵的建议。
由于