2017-05-08 9 views
0

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."); 
      } 
     }); 
    } 

答えて

1

はい、Apache Igniteはそれを直接サポートしています。 https://apacheignite.readme.io/docs/job-scheduling#section-one-at-a-time

すべてのサーバーには独自の待機キューがあり、サーバーは直前のジョブで完了した直後にキュー内の次のジョブに移動することに注意してください。

あなたも、より積極的なスケジュールをご希望の場合は、ここでJob-Stealingスケジュールを見てとることができます。仕事は自分のキューたら、他のサーバー上でジョブキューから有効になって、サーバーがしますまだ仕事を盗むでhttps://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/spi/collision/jobstealing/JobStealingCollisionSpi.html

を空になる。ほとんどのパラメータは設定可能です。

+0

これは、タスクが異なる時間とサーバノードをとり、実行時に参加して停止するため、私の特定の問題を解決するかどうかわかりません。私は、サーバーが現在のタスクで完了し、FIFOの順序で待機しないとすぐに、新しいタスクのためにサーバーを利用可能にしたい。 FifoQueueCollisionSpiもPriorityQueueCollisionSpiもこれを解決できるとは思いませんか? – DonTequila

+0

私はレスポンスを更新しました。私は仕事を盗むことがあなたが探しているかもしれないものだと思います。 – Dmitriy

+0

申し訳ありませんが、私の問題を解決することができるジョブスティールの使用方法を完全には理解していません。使用可能なサーバの数は、SPIが設定されているときは分かりません。サーバは実行時に参加/離脱できます。だから私は、並列ジョブの数が起動時に構成されなければならないように見えますが、これはサーバーの数と同じにする必要があると思います。あるいは私は誤解していますか?このSPIユースケースの例はありますか? – DonTequila