【发布时间】:2016-02-15 12:22:06
【问题描述】:
刚开始学习 MapReduce,我有一个文件,其中有一个演员和他出演的一部电影(每行)。我想创建一个文件如下:
actor movie1, movie2, ..., movieN
即一个键值文件,但只有一个演员和他的所有电影的一行出现。这没问题。
创建此文件后,我想找到播放最多电影的演员作为第二个 MR - Job。我阅读了我的新文件(上一个作业的输出)并简单地用数字替换(在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 将输出播放电影最多的演员。有以下数据:
演员 1 电影 1、电影 2、电影 3
演员2 电影4,电影5
所以 Reducer_0 将让 actor1 计数,从而输出 actor1 3,Reducer_1 将输出 actor2 2。所以我将有两行而不是一个 (actor1) - 因为每个 Reducer 都找到了演员。
在我描述了我的行为之后,我有以下问题:
要么我不明白它是如何工作的(使用多个减速器 - 在一个集群中),要么我必须以某种方式进行同步?
【问题讨论】:
标签: java mapreduce distributed counting mapper