我如何 运行 使用 Hazelcast 在集群中的两个实例中执行一项大任务
How can I run a big task in two instances in a cluster using Hazelcast
我想 运行 java 任务在两个实例中使用 Hazelcast 在集群中相互共享。因此,任务可以更快地完成,而不是 运行ning 在单个实例中完成。请帮忙!
从你发布的问题来看,你的问题不是很清楚。您的主要任务可能是做以下事情之一。
- 处理存储在 hazelcast 分布式数据中的数据(数据密集型)
结构。
- 数 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" 将实现 Runnable
和 Serializable
接口并在 运行() 方法中进行必要的处理。如果你需要让你在 run()
中使用 hzinstance,请同时实现 HazelcastInstanceAware
。
对于情况 2) 你可以调用
executor.executeOnAllMembers(new YourBigTaskClass());
这将在所有已知的集群成员上执行您的任务。
希望这对您有所帮助。我仍然鼓励您研究 IExecutorService
的其他方法,并以最佳方式使用最适合您问题的方法。
我想 运行 java 任务在两个实例中使用 Hazelcast 在集群中相互共享。因此,任务可以更快地完成,而不是 运行ning 在单个实例中完成。请帮忙!
从你发布的问题来看,你的问题不是很清楚。您的主要任务可能是做以下事情之一。
- 处理存储在 hazelcast 分布式数据中的数据(数据密集型) 结构。
- 数 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" 将实现 Runnable
和 Serializable
接口并在 运行() 方法中进行必要的处理。如果你需要让你在 run()
中使用 hzinstance,请同时实现 HazelcastInstanceAware
。
对于情况 2) 你可以调用
executor.executeOnAllMembers(new YourBigTaskClass());
这将在所有已知的集群成员上执行您的任务。
希望这对您有所帮助。我仍然鼓励您研究 IExecutorService
的其他方法,并以最佳方式使用最适合您问题的方法。