Hadoop 减速器卡在70%
我正在用hadoop完成一个非常初始的编程任务,并着手解决经典的字数问题 已经在hdfs上放置了一个示例文件,并尝试在其上运行wordcount。映射器通过得很好,但是,减速器卡在70%的位置,从未向前移动 我也用本地文件系统上的文件尝试了这个方法,得到了同样的结果 我可能做错了什么? 以下是map和reduce函数-Hadoop 减速器卡在70%,hadoop,mapreduce,Hadoop,Mapreduce,我正在用hadoop完成一个非常初始的编程任务,并着手解决经典的字数问题 已经在hdfs上放置了一个示例文件,并尝试在其上运行wordcount。映射器通过得很好,但是,减速器卡在70%的位置,从未向前移动 我也用本地文件系统上的文件尝试了这个方法,得到了同样的结果 我可能做错了什么? 以下是map和reduce函数- public void map(LongWritable key, Text value, OutputCollector<Text, IntWritabl
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));
}
public void映射(可长写键、文本值、,
OutputCollector输出,报告器(报告器)
抛出IOException{
//TODO自动生成的方法存根
字符串行=value.toString();
String[]lineparts=line.split(“,”);
对于(inti=0;i您从未在迭代器上调用next()
,因此您基本上创建了一个无限循环
作为旁注,实现此单词计数示例的首选方法不是将计数增加1
,而是使用以下值:
IntWritable value = values.next();
count += value.get();
通过这种方式,您可以将减速机
重新用作组合器
,这样它将计算每个映射器的部分计数,并向减速机发出(“wordX”,7),而不是从给定映射器发出7次(“wordX”,1)。您可以阅读有关组合器的更多信息。您永远不会调用next()
在迭代器上,因此基本上创建了一个无限循环
作为旁注,实现此单词计数示例的首选方法不是将计数增加1
,而是使用以下值:
IntWritable value = values.next();
count += value.get();
通过这种方式,您可以将减速机
重新用作组合器
,这样它将计算每个映射器的部分计数,并向减速机发出(“wordX”,7),而不是从给定映射器发出7次(“wordX”,1)。您可以阅读有关组合器的更多信息