【问题标题】:Hadoop - word count per nodeHadoop - 每个节点的字数
【发布时间】:2015-05-03 10:47:57
【问题描述】:

我正在Hadoop 中实现WordCount.java 的自定义版本,我有兴趣输出每个节点的字数。

例如,给定文本:

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

FindMe node01: 2
FindMe node02: 3

这是我Mapper的一个sn-p

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

这段代码输出

FindMe n

其中 n 是所有输入中出现的总次数。

如何输出每个节点的计数以及该节点的某种标识符,就像我上面提供的示例一样?

【问题讨论】:

    标签: java hadoop mapreduce word-count


    【解决方案1】:

    您可以在映射器中输出字符串+主机名,以便您可以统计每个节点的字数。

       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);
              }
            }
    

    【讨论】:

    • 感谢您的及时回复。有没有像node01, node02, ...这样偶然增加的更方便的nodeId?
    • 我认为要跨节点计算字数,您需要在 key 中包含 nodename,以便相似的 key 在同一个 reducer 中聚合。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多