hadoop上的mapreduce-将数据从Map器发送到还原器

xesrikrc  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(322)

我正在尝试实现一个特定问题的mapreduce算法。假设在我的Map器中,我需要处理一个大尺寸的文本对象。下面的例子总结了我的问题。我有文本对象: Today is a lovely day 我需要对单词做一些处理。所以我有两个选择:
我可以向reducer发送以下形式的键值对:

<1,Today>

<1,is>

<1,a> 

<1,lovely> 

<1,day>

我可以发送键值对 <1,Today is a lovely day> 然后对其进行处理,例如,标记字符串对象。
对于这种情况,最好的方法是什么?在第一种情况下,我必须向reducer发送更多的数据,但是我没有要标记的string对象,就像在第二种情况下一样。但是,在第二种情况下,Map器发送的数据量较小。

tvz2xvvm

tvz2xvvm1#

我不认为你会大大提高你的性能,通过减少流量的方式。这里真正重要的是,在第一种情况下,所有数据在按字进入reducer之前都将被分组,从而产生一组与第二个选项完全不同的键值对。我不确定你能不能对他们做同样的手术。假设您将拥有:

<Today is a lovely day>
<Today is another lovely day>

在第一种情况下,reducer将使用分组的单词对(假设关键字是单词而不是数字):

<a, 1> 

<another, 1> 

<day, 2>

<is, 2>

<lovely,2>

<Today, 2>

正如您所看到的,reducer输入是分组和排序的,在更高级的场景中,您可以根据这些输入的值执行逻辑,比如查找最大值或搜索平均值。
在第二种情况下,关键是句子:

<Today is a lovely day, 1>

<Today is another lovely day, 1>

所以有可能两个不同的减速器会处理这两对。您可以对它执行的操作与第一个操作略有不同,因为它是一组不同的数据。不可能像第一种情况那样执行基于键的最大值或平均值

相关问题