我正在用hadoop编写一个非常初始的编程任务,并使用经典的wordcount问题。
已经在hdfs上放置了一个示例文件,并尝试在其上运行wordcount。Map器通过得很好,然而,减速器卡在70%,从不前进。
我也用本地文件系统上的文件尝试了这个方法,得到了相同的结果。
我会做错什么?以下是map和reduce函数-
public void map(LongWritable key, Text value,
OutputCollector<Text, IntWritable> output, Reporter reporter)
throws IOException {
// TODO Auto-generated method stub
String line = value.toString();
String[] lineparts = line.split(",");
for(int i=0; i<lineparts.length; ++i)
{
output.collect(new Text(lineparts[i]), new IntWritable(1));
}
public void reduce(Text key, Iterator<IntWritable> values,
OutputCollector<Text, IntWritable> output, Reporter reporter)
throws IOException {
// TODO Auto-generated method stub
int count = 0;
while(values.hasNext())
{
count=count+1;
}
output.collect(key , new IntWritable(count));
}
1条答案
按热度按时间0lvr5msh1#
你从不打电话
next()
在迭代器上,基本上创建了一个无限循环。作为补充说明,实现这个单词计数示例的首选方法是不将计数递增
1
,但改用值:这样,你就可以重复使用你的电脑了
Reducer
作为一个Combiner
因此,它将计算每个Map器的部分计数,并向reducer发出(“wordx”,7),而不是从给定Map器发出7次(“wordx”,1)。您可以在这里阅读更多关于合并器的信息。