在多个EC2实例中远程执行程序并等待结果
Remotely execute program in multiple EC2 instances and wait for results
假设有三个名为 A、X、Y 的 EC2 实例。
我想在 A 中执行其他 Java 程序 ja 中的 Java 程序 jx, jy in X, Y。
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,其他参数由 return 值确定。
ja需要分别执行5次jx和jy
我认为ja的伪代码如下:
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 或任何其他员工的经验。欢迎简单易行的方法。
如果您希望以异步方式在实例之间将变量传递给 运行 任务,我认为最好的解决方案是 Amazon SQS Queue.
这将允许您 运行 X 和 Y 上的 Java 程序,并将结果作为包含要在 A 上使用的结果的消息提交到队列。A 可以然后间歇性地轮询队列以查找包含结果的消息,然后 运行 jA 使用这些变量。
这是最优雅的解决方案,可以解耦您的应用程序。另一种选择是 post 将 X 和 Y 的结果作为文件发送到 S3,然后 A 偶尔会检查该文件并获取其副本(如果它存在)。
假设有三个名为 A、X、Y 的 EC2 实例。
我想在 A 中执行其他 Java 程序 ja 中的 Java 程序 jx, jy in X, Y。 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,其他参数由 return 值确定。
ja需要分别执行5次jx和jy
我认为ja的伪代码如下:
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 或任何其他员工的经验。欢迎简单易行的方法。
如果您希望以异步方式在实例之间将变量传递给 运行 任务,我认为最好的解决方案是 Amazon SQS Queue.
这将允许您 运行 X 和 Y 上的 Java 程序,并将结果作为包含要在 A 上使用的结果的消息提交到队列。A 可以然后间歇性地轮询队列以查找包含结果的消息,然后 运行 jA 使用这些变量。
这是最优雅的解决方案,可以解耦您的应用程序。另一种选择是 post 将 X 和 Y 的结果作为文件发送到 S3,然后 A 偶尔会检查该文件并获取其副本(如果它存在)。