为了实现以下场景,我需要学习哪些概念



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

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

这是我的想法:

  1. 将数据划分为小的.txt(s)。我已经做过了
  2. 通过将Java程序提取到.jar中,在每个节点上安装Java程序。已经完成了

现在我下一步要做什么才能实现它呢?我是并行处理和MPI的新手。只是需要一些指导。

感谢您的提前帮助:)

这里是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();
            }
        }
    }
}

你用"不需要并行处理"来反驳自己——你实际上把问题定义为令人尴尬的并行,这意味着节点之间不需要同步。

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

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

如果你把它看作一个Map/Reduce作业,你又错了,因为这将是映射部分。Hadoop或Spark会将该文件作为输入在节点之间进行拆分,您可以像检查它一样检查每个输入。之后,您将发出有趣的行或一些其他数据。在大多数系统中,您可以跳过Reduce部分,这是您想要做的,只需要将映射的结果再次连接起来。

相关内容

  • 没有找到相关文章

最新更新