2013-10-09 66 views
-1

我寫了一個java代碼,它的運行時間很糟糕。我知道也許我的代碼效率不高,我不專注於提高效率。此時唯一重要的是更快地運行我的代碼。我有權訪問具有20個以上節點的羣集。以下是我的代碼部分需要花費太多時間運行的模式。循環迭代的第一個是完全獨立的。在多臺服務器上運行我的java代碼

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是一個好主意?希望你能幫助我一些想法,教程或類似的例子。謝謝。

+3

10到11功率迭代 - 我想你會需要很多機器 – KevinDTimm

+0

@KevinDTimm:你說得對!我可以訪問超過20臺服務器。希望這已經足夠了。 – user2330489

+0

可能實際上高於我認爲取決於'isSubset'多久的真實性 – dardo

回答

1

爲了獲得更好的性能 - 你應該使用線程

+0

感謝您的回答。根據我的知識,使用線程意味着我的工作的某些部分將在一個CPU中同時處理。我對嗎?如果是這樣,是否有可能在多臺連接的服務器上使用線程? – user2330489

0

要使用MapReduce,您首先要將問題分區(映射)爲提供給實際處理器(Reducer)的子集。在所有映射的輸入完成處理後,這些被連接在一起。

這就是說,你有比拋出CPU更多的問題,這個算法超慢,並找出如何映射輸入到鍵值對用於像Hadoop這樣的東西需要一些重大的重構。

可以從單獨的映射器類在Hadoop的基礎讀了起來:

Apache Hadoop Mapper

+0

我完全同意你的看法。我正在尋找一些類似的例子來了解如何將其轉換爲mapreduce作業。 – user2330489

+0

我當然認爲這個問題不能用map/reduce(有點高效)來表達。但我看不到整個代碼,只是一些非常奇怪的碎片。 –

+0

@ThomasJungblut:因爲整個代碼大約有15000行,其他部分足夠快。 – user2330489

相關問題