我需要学习哪些概念来实现以下场景?

时间:2014-11-11 13:44:06

标签: java parallel-processing mapreduce distributed-computing

可能我在这里大声思考,但是如何在不同的计算机上运行一个简单的java程序(没有其他依赖项)(不需要并行处理),具体如下:

  1. 我有一组数据。假设数据在.txt文件中。
  2. 我还有一个简单的java程序(见下文),它使用这些数据作为输入。
  3. 现在我有10台电脑。让我们称它们为节点。
  4. 我必须在每个节点上运行java程序(节点彼此独立)并从每个节点获取输出并保存  进入另一个txt。我们说output.txt。这可能就像减少部分地图减少技术一样。
  5. 以下是我的想法:

    1. 将数据划分为小.txt(s)。我已经完成了这个
    2. 在每个节点上安装Java程序,将其解压缩到.jar。已经完成了这个
    3. 现在我需要做些什么来实现它?我是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();
                  }
              }
          }
      }
      

1 个答案:

答案 0 :(得分:1)

你自己与#34相矛盾;不需要并行处理"您实际上将问题定义为embarrassingly parallel,这意味着节点之间不需要同步。

在您已经完成的部分(安装java,复制文件)之后,您只需要启动该程序。使用10个节点,你可能会更快地使用shell或python脚本来访问每个节点,但是随着节点数量的增加,它变得越来越复杂,这就是为什么你有Hadoop / YARN或MPI的原因为你处理这个问题。

例如,在MPI中将有一个主节点和N个从属。主设备将读取文件并将其逐行发送给从设备。完成后,它可以接收并连接来自从属的答案,这与你想在output.txt中写的内容相同。

如果你把它看成是Map / Reduce的工作,你又错了,因为这将是映射部分。该文件将由Hadoop或Spark在您的节点之间作为输入拆分,您可以检查每个输入,例如您想要检查它的内容。然后你会发出有趣的线条或其他一些数据。您可以在大多数系统中跳过Reduce部分,这是您想要做的事情,并且只会重新连接映射的结果。