Apache Igniteは比較的新しいものです。私はノードにタスクを配布するためにIgnite計算を使用しています。私の目標は、タスクを生成し、 "フリー"のノードにのみこれらを送信するタスクディスパッチャーです。 1つのノードは、一度に1つのタスクしか実行できません。すべてのノードにタスクが実行中の場合、ディスパッチャは次のノードが使用可能になるのを待ってから、次のタスクを実行依頼します。Apache Igniteのノードごとに1つのタスク
これをキューとasync Callableで実装できますが、このような何かを行うIgniteオンボードクラスがあるのでしょうか? ComputeTaskSplitAdapterクラスが私が見る必要があるかどうか分からない、私はその目的を完全には理解していない。
助けてください。
サーバーノードは、タスクの配布中にクラスタに参加したり離れることができます。 タスクは、ノードで異なる時間がかかる可能性があり、サーバーがタスクを完了するとすぐに次のタスクを取得します。
は、ここに私のノードのコードです:
JobStealingCollisionSpi spi = new JobStealingCollisionSpi();
spi.setActiveJobsThreshold(1);
IgniteConfiguration cfg = new IgniteConfiguration();
cfg.setCollisionSpi(spi);
Ignition.start(cfg);
そして、これは(テスト用)私の仕事の分配コードです:
JobStealingCollisionSpi spi = new JobStealingCollisionSpi();
spi.setActiveJobsThreshold(1);
IgniteConfiguration cfg = new IgniteConfiguration();
cfg.setCollisionSpi(spi);
Ignition.setClientMode(true);
Ignite ignite = Ignition.start(cfg);
for (int i = 0; i < 10; i++)
{
ignite.compute().runAsync(new IgniteRunnable()
{
@Override
public void run()
{
System.out.print("Sleeping...");
try
{
Thread.sleep(10000);
} catch (InterruptedException e)
{
e.printStackTrace();
}
System.out.println("Done.");
}
});
}
これは、タスクが異なる時間とサーバノードをとり、実行時に参加して停止するため、私の特定の問題を解決するかどうかわかりません。私は、サーバーが現在のタスクで完了し、FIFOの順序で待機しないとすぐに、新しいタスクのためにサーバーを利用可能にしたい。 FifoQueueCollisionSpiもPriorityQueueCollisionSpiもこれを解決できるとは思いませんか? – DonTequila
私はレスポンスを更新しました。私は仕事を盗むことがあなたが探しているかもしれないものだと思います。 – Dmitriy
申し訳ありませんが、私の問題を解決することができるジョブスティールの使用方法を完全には理解していません。使用可能なサーバの数は、SPIが設定されているときは分かりません。サーバは実行時に参加/離脱できます。だから私は、並列ジョブの数が起動時に構成されなければならないように見えますが、これはサーバーの数と同じにする必要があると思います。あるいは私は誤解していますか?このSPIユースケースの例はありますか? – DonTequila