可能我在这里大声思考,但是如何在不同的计算机上运行一个简单的java程序(没有其他依赖项)(不需要并行处理),具体如下:
.txt
文件中。txt
。我们说output.txt
。这可能就像减少部分地图减少技术一样。以下是我的想法:
.txt
(s)。我已经完成了这个.jar
。已经完成了这个现在我需要做些什么来实现它?我是Parallel Processing和MPI的新手。只需要一些指导。
感谢您在Advance中的帮助:)
这里是Java程序:
import java.io.*;
public class CopyFile {
public static void main(String args[]) throws IOException {
FileInputStream in = null;
FileOutputStream out = null;
try {
in = new FileInputStream("input.txt");
out = new FileOutputStream("output.txt");
int c;
while ((c = in.read()) != -1) {
// want to do some computation. Let's say finding prime number
}
} finally {
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
}
}
}
答案 0 :(得分:1)
你自己与#34相矛盾;不需要并行处理"您实际上将问题定义为embarrassingly parallel,这意味着节点之间不需要同步。
在您已经完成的部分(安装java,复制文件)之后,您只需要启动该程序。使用10个节点,你可能会更快地使用shell或python脚本来访问每个节点,但是随着节点数量的增加,它变得越来越复杂,这就是为什么你有Hadoop / YARN或MPI的原因为你处理这个问题。
例如,在MPI中将有一个主节点和N个从属。主设备将读取文件并将其逐行发送给从设备。完成后,它可以接收并连接来自从属的答案,这与你想在output.txt中写的内容相同。
如果你把它看成是Map / Reduce的工作,你又错了,因为这将是映射部分。该文件将由Hadoop或Spark在您的节点之间作为输入拆分,您可以检查每个输入,例如您想要检查它的内容。然后你会发出有趣的线条或其他一些数据。您可以在大多数系统中跳过Reduce部分,这是您想要做的事情,并且只会重新连接映射的结果。