2015-05-03 2 views
1

Я реализую индивидуальную версию WordCount.java в Hadoop, где меня интересует вывод количества слов на узел.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

Вы можете вывести строку + имя хоста в mapper, чтобы вы могли подсчитать количество слов для каждого узла.

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

Спасибо за быстрый ответ. Есть ли более удобный инкремент nodeId, например, «node01, node02, ...»? –

+0

Я думаю, что для подсчета слов по узлам вам нужно иметь nodename в ключе, чтобы аналогичные ключи были агрегированы в одном и том же редукторе. –

Смежные вопросы