我写了一段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是个好主意?希望你可以帮助我一些想法,教程或类似的例子。感谢。
答案 0 :(得分:1)
为了获得更好的性能 - 您应该使用线程
答案 1 :(得分:0)
要使用MapReduce,首先要将问题分区(映射)到提供给实际处理器(Reducer)的子集中。然后在完成所有映射输入处理后将它们连接在一起。
也就是说,你有更多的问题而不是抛出CPU,这个算法非常慢,并且弄清楚如何将输入映射到键值对以便与Hadoop一起使用将需要一些重大的重构。
可以单独从Mapper类中了解Hadoop的基础知识: