Hadoop WordCount输出

时间:2014-07-12 01:33:57

标签: hadoop

我是hadoop的新手并且正在运行一些示例以便更熟悉它。我运行了wordcount,当我去检查输出hadoop fs -cat outt时,我得到了3个目录,而不是通常名为outt / part-00000的目录。这是我的目录:

-rw-r--r--   1 hadoop supergroup          0 2014-07-11 20:13 outt/_SUCCESS 
-rw-r--r--   1 hadoop supergroup         15 2014-07-11 20:13 outt/part-r-00000
-rw-r--r--   1 hadoop supergroup          0 2014-07-11 20:13 outt/part-r-00001

当我执行hadoop fs -cat outt/_SUCCESShadoop fs -cat outt/part-r-00001时,不会显示任何内容。但是,当我hadoop fs -cat outt/part-r-00000时,我得到:record_count 1。

我的文件只是说“Hello World”所以我期待结果:Hello 1 World 1.

有谁知道如何获得正确的输出?

2 个答案:

答案 0 :(得分:2)

1.)_ success和part-r-00000/1不是目录而是文件。目录更像是一组文件和其他目录

2。)如果所有节点和缩减器成功执行提交的作业并且结果集完整,则由hadoop自动创建_Success文件。

3.)如果您收到两个部分文件,则表示您的工作描述中有两个缩减器。检查代码以查找是否有job.setNumReduceTasks(2);之类的语句。名为00000的部件是第一个减速器的输出,00001是第二个减速器的输出。 ' R'意味着输出来自reducer。如果看到' m'而不是' r'这意味着你没有减速器,而且工作只是地图工作。

答案 1 :(得分:1)

当您执行hadoop fs -cat outt/part-r-00000并获取输出为:record_count 1

这意味着您可能正在计算输入文件中的行数。

读完一行后,您需要对该行进行标记,并将每个单词(标记)取出来。

以下是示例代码:

String line = value.toString();
StringTokenizer tokenizer = new StringTokenizer(line);
while (tokenizer.hasMoreTokens()) {
  word.set(tokenizer.nextToken());
  context.write(word, one);
}  

您可以在此处找到完整代码:WordCount

在这里,您可以分割java API的方法而不是StringTokenizer