-2

Hazelcast を使用してクラスター内で互いに共有する 2 つのインスタンスで Java タスクを実行したいと考えています。そのため、タスクは単一のインスタンスで実行するよりも速く完了できます。助けてください!

4

1 に答える 1

2

あなたの問題は、あなたが投稿した質問からはあまり明確ではありません。あなたの大きな仕事は、次のいずれかをしているかもしれません。

  1. hazelcast 分散データ構造に格納された処理データ (大量のデータ)。
  2. hazelcast からのデータが制限されているか、まったくない数値処理 (CPU 負荷の高い) 操作。

どちらの場合も、hazelcast で ExecutorService の分散実装を利用できます。以下のリンクを参照してください。

http://docs.hazelcast.org/docs/3.5/javadoc/com/hazelcast/core/IExecutorService.html

ケース 1) の場合、hazelcast はデータを複数のノード (インスタンス) に分割するため、次のように executeOnKeyOwner() メソッドを呼び出すことで、キーの所有者でタスクを実行できます。

サンプルコード

    HazelcastInstance hz = Hazelcast.newHazelcastInstance();
    Map<Integer, String> map = hz.getMap("yourMap");
    for (int key = 0; key < 100; key++)
        map.put(key, "someValue");
    IExecutorService executor = hz.getExecutorService("executor");
    for (Integer key : map.keySet())
        executor.executeOnKeyOwner(new YourBigTask(), key);

YourBigTask は、 run() メソッド内で必要な処理を実装Runnableおよびインターフェイスし、実行する「大きなタスク クラス」です。Serializable内部で hzinstance を使用する必要がある場合は、同様run()に実装HazelcastInstanceAwareします。

ケース 2) の場合は、単に呼び出すことができます

    executor.executeOnAllMembers(new YourBigTaskClass()); 

これにより、既知のすべてのクラスター メンバーでタスクが実行されます。

お役に立てれば。IExecutorService他の方法を検討し、問題に最も適した方法を使用することをお勧めします。

于 2015-09-26T09:07:58.870 に答える