我是hadoop的新手,还经常玩 WordCount 例子。我遇到了一个让我困惑的问题。例如,如果我从一个文本文件中提取字数,并且我想以这样一种方式过滤它,即输出中只包含长度超过5个字母的单词,那么我是否必须运行2个作业才能完成此操作?第一个任务是计算单词,第二个任务是过滤少于5个字母的单词?或者我可以只把逻辑写进reducer,如果出现的次数少于5次,它就不会把单词写进结果文件?如果有多个reducer示例在运行,这会导致无效的输出吗?
WordCount
bd1hkmkf1#
简单的回答是你不需要找工作。你可以通过一项工作来实现这一点。你在问题的最后一部分所描述的逻辑是绝对正确的。在mapreduce框架中,与单个键相关的所有数据(值)总是传递给同一个键 Reducer . 因此,即使有多个减速机在为您的作业运行,也不会影响输出。附言:输出中只有超过5个字母的单词这是你问题的第二段。我假设你的意思是一个单词出现5次而不是单词的长度。但是你只需要长度超过5的单词,你可以过滤进去 Mapper 它自己。因此,将有更少的数据 sort-shuffle 阶段(通过网络进行数据排序和传输)和较少的数据处理 Reducer .
Reducer
Mapper
sort-shuffle
ecfsfe2w2#
一个mapreduce作业就足够了。最佳实践表明,如果可能的话,应该在mapper中过滤和投影数据。在您的情况下,您的过滤条件仅取决于输入数据(输入字中的字符),然后您可以在Map器端过滤输入,并且只发送到包含5个以上字母的减缩字。提高工作绩效。将数据发送到reducer以删除它是没有意义的。尽管它也应该起作用。
2条答案
按热度按时间bd1hkmkf1#
简单的回答是你不需要找工作。
你可以通过一项工作来实现这一点。你在问题的最后一部分所描述的逻辑是绝对正确的。
在mapreduce框架中,与单个键相关的所有数据(值)总是传递给同一个键
Reducer
. 因此,即使有多个减速机在为您的作业运行,也不会影响输出。附言:
输出中只有超过5个字母的单词
这是你问题的第二段。我假设你的意思是一个单词出现5次而不是单词的长度。
但是你只需要长度超过5的单词,你可以过滤进去
Mapper
它自己。因此,将有更少的数据sort-shuffle
阶段(通过网络进行数据排序和传输)和较少的数据处理Reducer
.ecfsfe2w2#
一个mapreduce作业就足够了。
最佳实践表明,如果可能的话,应该在mapper中过滤和投影数据。
在您的情况下,您的过滤条件仅取决于输入数据(输入字中的字符),然后您可以在Map器端过滤输入,并且只发送到包含5个以上字母的减缩字。提高工作绩效。将数据发送到reducer以删除它是没有意义的。尽管它也应该起作用。