2015-05-03 50 views
1

我在Hadoop中實現了WordCount.java的定製版本,其中我有興趣輸出每個節點的字數。Hadoop - 每個節點的字數

例如,給定文本:

FindMe FindMe ..... .... .... ..更多大的文本...... FindMe FindMe FindMe

FindMe node01: 2 
FindMe node02: 3 

這裏是我的Mapper

String searchString = "FindMe"; 
while (itr.hasMoreTokens()) { 
    String token = itr.nextToken(); 
    if (token.equals(searchString)) { 
    word.set(token); 
    context.write(word, one); 
    } 
} 

此代碼輸出

片段
FindMe n 

其中n是所有輸入中出現的總次數。

如何輸出每個節點的計數以及此節點的某種標識符,就像我上面提供的示例一樣?

回答

2

您可以在映射器中輸出字符串+主機名,以便您可以爲每個節點設置字數。

java.net.InetAddress localMachine = java.net.InetAddress.getLocalHost(); 
    String computerName = localMachine.getHostName();  
     String searchString = "FindMe"; 
     while (itr.hasMoreTokens()) { 
      String token = itr.nextToken(); 
      if (token.equals(searchString)) { 
      word.set(token+" "+computerName); 
      context.write(word, one); 
      } 
     } 
+0

感謝您的及時回覆。有沒有像'node01,node02,...'偶然增加一個更方便遞增的nodeId? –

+0

我認爲跨節點有字數統計,您需要在關鍵字中包含nodename,以便類似的關鍵字在同一個reducer中聚合。 –