MapReduce 分布式减速器
MapReduce distributed reducer
刚开始学习 MapReduce,我有一个文件,其中有一个演员和他演过的一部电影(每行)。我想创建一个文件如下:
actor movie1, movie2, ..., movieN
即一个键值文件,但只有一个演员及其所有电影的台词。这没问题。
创建此文件后,我想找到播放电影最多的演员作为第二个 MR - 工作。我阅读了我的新文件(上一个作业的输出)并简单地用数字替换(在 map()
中)电影。在我的 Reducer 中,我只需要与之前的结果进行比较
if(numberOfRoles.get() < sum){
numberOfRoles.set(sum);
actorWithMostRoles.set(key);
}
其中 numberOfRoles 和 actorWithMostRoles 是 Reducer 的属性 - Class.
这没有任何问题。
我的输出jps:
$ jps
32347 Jps
25323 DataNode
25145 NameNode
25541 SecondaryNameNode
我知道可以有多个Mapper & Reducer。例如 Reducer_0 和 Reducer_1 将输出播放电影最多的演员。具有以下数据:
actor1 movie1, movie2, movie3
actor2 movie4, movie5
所以Reducer_0将让actor1进行计数,从而输出actor1 3,而Reducer_1将输出actor2 2.所以我将有两行而不是一行 (actor1) - 因为每个 Reducer 都找到了演员。
在描述完我的行为后,我有以下问题:
要么我不明白它是如何工作的(在集群中有多个减速器),要么我必须以某种方式进行同步?
是的,你明白它是如何工作的。
在此设置中,您将需要另一个 map reduce 作业来完成它。
或者,只使用一个减速器就可以了!
在第二个 MR 作业中读取您的新文件(上一个作业的输出)
并将您的 MR 更改为如下所示
映射阶段:
读取每个演员和他们的电影数量,并使用一个特殊的键 "max" 和值对演员姓名和他们的电影数量输出它,就像这个
output key = "max"
output value = ("actor", movieCount)
减少阶段:
您将在单个 reducer 中将所有演员和他的电影计数作为值列表,因此只需从值列表中找到最大电影计数
input key = "max"
input value = [("actor",movie_count), ("actor",movie_count) ...]
output key = "most movies played"
output value = max_value
刚开始学习 MapReduce,我有一个文件,其中有一个演员和他演过的一部电影(每行)。我想创建一个文件如下:
actor movie1, movie2, ..., movieN
即一个键值文件,但只有一个演员及其所有电影的台词。这没问题。
创建此文件后,我想找到播放电影最多的演员作为第二个 MR - 工作。我阅读了我的新文件(上一个作业的输出)并简单地用数字替换(在 map()
中)电影。在我的 Reducer 中,我只需要与之前的结果进行比较
if(numberOfRoles.get() < sum){
numberOfRoles.set(sum);
actorWithMostRoles.set(key);
}
其中 numberOfRoles 和 actorWithMostRoles 是 Reducer 的属性 - Class.
这没有任何问题。
我的输出jps:
$ jps
32347 Jps
25323 DataNode
25145 NameNode
25541 SecondaryNameNode
我知道可以有多个Mapper & Reducer。例如 Reducer_0 和 Reducer_1 将输出播放电影最多的演员。具有以下数据:
actor1 movie1, movie2, movie3
actor2 movie4, movie5
所以Reducer_0将让actor1进行计数,从而输出actor1 3,而Reducer_1将输出actor2 2.所以我将有两行而不是一行 (actor1) - 因为每个 Reducer 都找到了演员。
在描述完我的行为后,我有以下问题:
要么我不明白它是如何工作的(在集群中有多个减速器),要么我必须以某种方式进行同步?
是的,你明白它是如何工作的。
在此设置中,您将需要另一个 map reduce 作业来完成它。
或者,只使用一个减速器就可以了!
在第二个 MR 作业中读取您的新文件(上一个作业的输出)
并将您的 MR 更改为如下所示
映射阶段:
读取每个演员和他们的电影数量,并使用一个特殊的键 "max" 和值对演员姓名和他们的电影数量输出它,就像这个
output key = "max"
output value = ("actor", movieCount)
减少阶段:
您将在单个 reducer 中将所有演员和他的电影计数作为值列表,因此只需从值列表中找到最大电影计数
input key = "max"
input value = [("actor",movie_count), ("actor",movie_count) ...]
output key = "most movies played"
output value = max_value