Javaジョブを並列計算できるクラスタプログラムを探しています。私は Rockscluster と Hadoop を見ました。Rockscluster を使用する際の問題は、Unix で計算を並行して実行するスクリプトが必要なことでした。ただし、私がやりたかったのは、ジョブを Java 自体のワーカーに送信して、ワーカーがジョブを計算して値を返すようにすることです。私の仕事は多くの異なるユーザーによって決定され、ジョブを実行する前にスクリプトを書くことができないからです。また、Hadoop を使用する際の問題は、Map-reduce ツールを使用していることですが、Java の仕事は Map-reduce スキームの恩恵を受けていないと思います。
欲しいものはシンプル。ジョブをワーカー (他のコンピューター ノード) に送信し、結果を受け取りたい。ワーカーに送信されるすべてのジョブは独立しています (したがって、依存関係について心配する必要はありません。ジョブは単純なジョブです)。また、それらの並列化をJava 自体に実装したいと考えています。複数のジョブをスケジューラに送信する場合、スケジューラがキューを設定し、いくつかのジョブを使用可能なノードに自動的に送信して、結果をユーザーに返すことを願っています。(自分でノードを選択してジョブを送信するような凝った機能は必要ありません...)
より良い説明のために、以下に例を挙げましょう。Java で作業している user1 がいるとします。彼はコンピューターの main() で 3 つの計算を行っています。以下は彼のコードです。
`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);
}
.... }`
サービス API は、それぞれ (クラス名、メソッド名、および入力パラメーター) を並列プログラム マネージャーに送信します。次に、並列プログラム マネージャーがこれらのジョブをノード (ワーカー) に分配します。ワーカーはすでに Multiplecal クラスを持っているため、サービス API から送信されたクラスとメソッドを照合して結果を取得できます。ワーカーは作業を終了すると、結果を user1 に返します。
上で述べたことは、私がやろうとしていることの全体像です。並列化のためのパラメータ形式は、上記のようである必要はありません。Java ジョブをクラスタ化して並列化する素敵なソフトウェアをご存知でしたら、貴重なアドバイスをお願いします。
ありがとう