我是hadoop的新手,为了更熟悉它,我正在运行一些示例。我运行了wordcount,当我检查输出部分时,我得到了3个目录,而不是通常的名为hadoop fs -cat outt /hadoop fs -cat outt-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我的文件只说"Hello World“,所以我期待结果: Hello 1 World 1。
有人知道如何获得正确的输出吗?
发布于 2014-07-12 14:32:50
1.) _success和part-r-00000/1不是目录,而是文件。目录更像是一组文件和其他目录
2.)如果提交的作业被所有节点和reducers成功执行且结果集完整,hadoop会自动创建_Success文件。
3.)如果你得到两个零件文件,这意味着你的工作描述中有两个减速器。检查代码,看看是否有类似job.setNumReduceTasks(2);的语句。名为00000的零件是第一个减速器的输出,00001是第二个减速器的输出。'r‘表示输出来自reducer。如果看到的是'm‘而不是'r’,这意味着你没有一个减速机,这个工作是只有map的工作。
发布于 2014-07-13 13:59:36
当您执行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。
https://stackoverflow.com/questions/24708766
复制相似问题