在多个EC2实例中远程执行程序并等待结果

时间:2015-02-16 07:52:53

标签: java amazon-web-services amazon-ec2 remote-access

假设有三个名为A,X,Y的EC2实例。

我想从A中的其他Java程序ja执行X,Y中的Java程序jx,jy。 ja需要传递jx和jy的命令行参数。

For EC2 instance A, X, Y, and Java program ja, jx, jy, 
A's ja------------> X's jx
     -------------> Y's jy

ja等待jx和jy的完成并获得结果值(或文件)

A's ja <---return val -------X's jx
       <---return val ------ Y's jy

同样,ja执行jx和jy,其他参数由返回值确定。

ja需要分别执行jx和jy 5次。

我认为ja的psudo代码如下:

for(int i = 0; i < 5; i++){
  rx = executeJX(argx);
  ry = executeJY(argy);

  waitJxJyFinish(); // jx and jy take ~30 min to finish.
  (argx, argy) = determineNextArgXandArgY(rx, ry);
}

约束

这仅仅是为了实验目的,而不是日常使用的生产,这就是为什么即使它是肮脏的方式,最小的开销方式是最好的。 我没有任何hadoop或任何其他工作人员的经验。欢迎简单易行的方式。

1 个答案:

答案 0 :(得分:1)

如果您希望以异步方式在实例之间传递变量来运行任务,我认为最佳解决方案是Amazon SQS Queue

这将允许您在X和Y上运行Java程序,并将结果作为包含您要在A上使用的结果的消息提交到队列。然后,A可以间歇性地轮询队列以查找消息,包含结果,然后使用这些变量运行jA。

这是最优雅的解决方案,可以解耦您的应用程序。另一种方法是将X和Y的结果作为文件发布到S3,然后A偶尔检查并获取它是否存在的副本。