我如何 运行 使用 Hazelcast 在集群中的两个实例中执行一项大任务

How can I run a big task in two instances in a cluster using Hazelcast

我想 运行 java 任务在两个实例中使用 Hazelcast 在集群中相互共享。因此,任务可以更快地完成,而不是 运行ning 在单个实例中完成。请帮忙!

从你发布的问题来看,你的问题不是很清楚。您的主要任务可能是做以下事情之一。

  1. 处理存储在 hazelcast 分布式数据中的数据(数据密集型) 结构。
  2. 数 c运行ching(CPU 激烈)操作有限或没有 来自 hazelcast 的数据。

在这两种情况下,您都可以利用 hazelcast 中 ExecutorService 的分布式实现。见下文 link :

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 是您的 "big task class" 将实现 RunnableSerializable 接口并在 运行() 方法中进行必要的处理。如果你需要让你在 run() 中使用 hzinstance,请同时实现 HazelcastInstanceAware

对于情况 2) 你可以调用

    executor.executeOnAllMembers(new YourBigTaskClass()); 

这将在所有已知的集群成员上执行您的任务。

希望这对您有所帮助。我仍然鼓励您研究 IExecutorService 的其他方法,并以最佳方式使用最适合您问题的方法。