-1

我写了一个java代码,它的运行时间很糟糕。我知道也许我的代码效率不高,而且我并不专注于提高效率。此时唯一重要的是更快地运行我的代码。我可以访问具有 20 多个节点的集群。以下是我的那部分代码的架构,它需要太多时间才能运行。第一个 for 循环迭代完全相互独立。

    for (int i = 0; i < 1000000; i++) {
        for (int j = 0; j < 10000; j++) {
            HashSet temp1 = new HashSet();
            for (int k = 0; k < 10; k++) {
                HashSet temp2 = new HashSet();
                boolean isSubset = temp1.containsAll(temp2);
                if (isSubset == true) {
                    BufferedReader input = new BufferedReader(new FileReader("input.txt"));
                    HashSet temp3 = new HashSet();
                    for (int l = 0; l < 10000; l++) {
                        boolean isSubset1 = temp1.containsAll(temp3);
                    }
                }
            }
        }
    }

基于我对分布式计算的基本知识,我可以在多台服务器上运行它以更快地获得结果,而且我认为 MapReduce 是另一个想法。我没有任何并行处理的经验。我需要一些想法和方向,我该如何并行化它?有什么平台可以让它并行吗?MapReduce 是个好主意吗?希望你能帮助我一些想法、教程或类似的例子。谢谢。

4

2 回答 2

1

为了获得更好的性能 - 你应该使用线程

于 2013-10-09T21:24:20.570 回答
0

要使用 MapReduce,您首先将问题划分(映射)为提供给实际处理器(Reducer)的子集。然后在所有映射的输入完成处理后将它们连接在一起。

也就是说,你有更多的问题,而不是把 CPU 扔给它,这个算法非常慢,并且弄清楚如何将输入映射到键值对以用于 Hadoop 之类的东西将需要一些重大的重构。

可以仅从 Mapper 类中阅读 Hadoop 的基础知识:

Apache Hadoop 映射器

于 2013-10-09T21:18:29.663 回答