Java MapReduce分布式减速器
刚开始学习MapReduce,我有一个文件,里面有一个演员和他演的一部电影(每行)。我想创建一个文件,如下所示:Java MapReduce分布式减速器,java,mapreduce,distributed,counting,mapper,Java,Mapreduce,Distributed,Counting,Mapper,刚开始学习MapReduce,我有一个文件,里面有一个演员和他演的一部电影(每行)。我想创建一个文件,如下所示: actor movie1, movie2, ..., movieN i、 一个键值文件,但只有一行演员和他所有电影的外观。这没问题 在我创建了这个文件之后,我想找到演过大多数电影的演员作为第二个MR-Job。我读取我的新文件(前一个作业的输出),然后简单地用编号替换(在map())电影。在我的减速机中,我只需与之前的结果进行比较 if(numberOfRoles.get()
actor movie1, movie2, ..., movieN
i、 一个键值文件,但只有一行演员和他所有电影的外观。这没问题
在我创建了这个文件之后,我想找到演过大多数电影的演员作为第二个MR-Job。我读取我的新文件(前一个作业的输出),然后简单地用编号替换(在map()
)电影。在我的减速机中,我只需与之前的结果进行比较
if(numberOfRoles.get() < sum){
numberOfRoles.set(sum);
actorWithMostRoles.set(key);
}
我知道可以有多个映射器和还原器。例如,Reducer_0和Reducer_1将输出播放电影最多的演员。具有下列数据:
演员1电影1、电影2、电影3演员2电影4,电影5 因此,Reducer\u 0将使actor1计数,从而输出actor13,Reducer\u 1将输出actor22。所以我将有两行而不是一行(actor1)——因为每个Reducer都找到了actor 在我描述了我的做法之后,我有以下问题:
要么我不了解它是如何工作的(在集群中使用多个减速器),要么我必须以某种方式进行同步?是的,您了解它是如何工作的 在此设置中,您需要另一个map reduce作业来完成它
或者,只需使用一个减速器就可以了 在第二个MR作业中读取新文件(前一个作业的输出)
把你的先生换成下面这样 映射阶段:
读取每个演员和他们的电影计数,并用一个特殊的键“max”和演员名称和他们的电影计数的值对输出,如下所示
output key = "max"
output value = ("actor", movieCount)
还原阶段:您将在单个减速机中获得所有演员及其电影计数作为值列表,因此只需从值列表中找到最大电影计数
input key = "max"
input value = [("actor",movie_count), ("actor",movie_count) ...]
output key = "most movies played"
output value = max_value
input key = "max"
input value = [("actor",movie_count), ("actor",movie_count) ...]
output key = "most movies played"
output value = max_value