【发布时间】:2013-08-29 05:18:47
【问题描述】:
我正在寻找一个可以并行计算 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作业的软件,请给我宝贵的建议。
谢谢
【问题讨论】:
标签: java hadoop parallel-processing grid cluster-computing