我与 Hazelcast 的人交谈,发现我对它的工作原理有一些基本的误解。我不明白您必须通过在计算节点上运行“com.hazelcast.examples.StartServer”来像服务或守护程序一样部署 Hazelcast。这就是节点如何意识到并相互交互的方式。 Hazelcast zip 包含一些用于此目的的批处理和 shell 脚本。也许这对其他人来说是显而易见的,但我在文档中没有找到任何明确说明这一点的内容。我从文档中得到的只是将 jar 放在我的类路径中,这使我可以访问所有类和方法。我不知道我应该如何准备计算节点以相互了解。
我上面的前两个问题来自 Hazelcast 文档,在分布式计算部分的第一个示例中,他们在 Callable内部创建了一个新的 Hazelcast 实例。我不确定他们为什么这样做,但这对我来说极具误导性。我认为这意味着我需要创建一个新的 Hazelcast 实例并将其与每个线程相关联。
上面的 Pveentjer 回答了问题 3。答案基本上是肯定的,如果你愿意的话。
问题 4 只是因为我对 Hazelcast 的工作原理感到困惑。基本上,Hazelcast 实例和线程之间没有我想的一对一的映射。每个 Hazelcast 实例已经是多线程的,因此出于并行处理的原因,无需在一个节点上创建多个实例(但您可能出于其他原因(堆空间限制等)想要这样做。当然,您肯定必须在所有计算节点上部署 Hazelcast(我使用上面提到的 StartServer)。
简而言之,我可以很容易地创建一个计算集群
1) 将 Hazelcast jar 放入主节点上的类路径中(或将其包含在我的 Eclipse 项目中)
2) 使用带有 StartServer 调用的批处理文件在计算节点上部署 Hazelcast
3) 创建一个 Runnable 并使其可序列化(连同它的所有依赖项)
4) 在我的 Main() 方法中创建一个 Hazelcast 实例并获取一个 IExecutorService 来执行我的 Runnable 实例
另一个重要的步骤是确保在计算节点上部署 StartServer 时,将 Hazelcast jar 以及包含 Runnable 定义的所有 jar 以及它所依赖的所有类都放在类路径中.
下面是一个简单的例子:
public class myRunnable implements Runnable, Serializable {
myTestClass mclass;
public myRunnable(){
mclass = new myTestClass();
}
@Override
public void run(){
try {
System.out.println("Putting thread to sleep for 5 seconds");
Thread.sleep(5000);
}
catch(Exception e){
e.printStackTrace();
}
System.out.println("\nTesting MyRunnable on Thread: " + Thread.currentThread().getName());
}
}
然后定义Runnable所依赖的类:
public class myTestClass implements Serializable{
List<Double> list = new ArrayList<Double>(10);
public void myTestClass(){
for (int i = 0; i < 10; i++)
list.add( (double) i);
}
}
并创建一个 Hazelcast 实例和 IExecutorService 来执行
public class TestHazelCast {
public static void main(String[] args) {
Config cfg = new Config();
HazelcastInstance instance = Hazelcast.newHazelcastInstance(cfg);
IExecutorService exec = instance.getExecutorService("exec");
for (int i = 0 ; i < 7; i++){
exec.execute(new myRunnable());
}
}
}
然后在计算节点上部署 Hazelcast 以及适当的 jar,使用类似:
java -server -Xms1G -Xmx1G -cp "../lib/hazelcast-3.2.2.jar;../lib/AllMyClasses.jar" com.hazelcast.examples.StartServer