map 100% reduce 100% 卡住?运行一个简单的单词长度统计

c2mepunchme 2014-12-18 09:44:38
求助,在运行一个简单的单词长度统计时,总卡在 map 100% reduce 100%?
运行其他案例没有问题

首先保证输入文件当中的单词都不重复

目前还是搞不定,只好求助各位大神,谢谢啦!
贴上我的代码(vmware ubuntu12.04 hadoop-1.2.1 伪分布式)

import java.io.IOException;
import java.util.*;

import org.apache.hadoop.fs.Path;
import org.apache.hadoop.conf.*;
import org.apache.hadoop.io.*;
import org.apache.hadoop.mapred.*;
import org.apache.hadoop.util.*;


public class word_length_count {

public static class Map extends MapReduceBase implements Mapper<LongWritable, Text, IntWritable, Text> {
private Text word = new Text();
private int length;
public void map(LongWritable key, Text value, OutputCollector<IntWritable, Text> output, Reporter reporter) throws IOException {
String line = value.toString();
StringTokenizer tokenizer = new StringTokenizer(line," \t\n\r--,.:;?![]{}()'\"\\.\\|_");
while (tokenizer.hasMoreTokens()) {
word.set(tokenizer.nextToken());
String wordString=word.toString();
length=wordString.length();
output.collect(new IntWritable(length), word);
}
}
}

public static class Reduce extends MapReduceBase implements Reducer<IntWritable, Text,IntWritable,Text> {

private Text ttt = new Text();
public void reduce(IntWritable key, Iterator<Text> values, OutputCollector<IntWritable,Text> output, Reporter reporter) throws IOException {
int sum=0;
// length.set(key.toString()+":");
while (values.hasNext()) {
sum ++;
}
ttt.set(""+sum);
output.collect(key,ttt);
}
}

public static void main(String[] args) throws Exception {




JobConf conf = new JobConf(word_length_count.class);
conf.setJobName("word_length_count");

conf.setMapOutputKeyClass(IntWritable.class);
conf.setMapOutputValueClass(Text.class);
conf.setOutputKeyClass(IntWritable.class);
conf.setOutputValueClass(Text.class);

conf.setMapperClass(Map.class);
conf.setReducerClass(Reduce.class);

conf.setInputFormat(TextInputFormat.class);
conf.setOutputFormat(TextOutputFormat.class);

FileInputFormat.setInputPaths(conf, new Path(args[0]));
FileOutputFormat.setOutputPath(conf, new Path(args[1]));


JobClient.runJob(conf);

}
}
...全文
1648 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
五哥 2018-08-02
  • 打赏
  • 举报
回复
引用 6 楼 DeliJIn 的回复:
while (values.hasNext()) {
sum ++;
}
这里少一行 "values.next()"
while (values.hasNext()) {
values.next();
sum ++;
}

死循环
DeliJIn 2018-08-01
  • 打赏
  • 举报
回复
while (values.hasNext()) {
sum ++;
}
这里少一行 "values.next()"
while (values.hasNext()) {
values.next();
sum ++;
}
小白鸽 2015-01-02
  • 打赏
  • 举报
回复
把运行日志贴出来
weitao1234 2014-12-31
  • 打赏
  • 举报
回复
加日志不就知道运行到哪一行代码了。
c2mepunchme 2014-12-19
  • 打赏
  • 举报
回复
  while (values.hasNext()) {
         sum ++;
       }
应该是在这里循环了,一直不去list里面的值就循环了。 改动之后就行了。 但是为什么reduce显示100%呢?
skyWalker_ONLY 2014-12-19
  • 打赏
  • 举报
回复
可以jps查看一下任务是否已经运行完毕
c2mepunchme 2014-12-18
  • 打赏
  • 举报
回复
其实这个任务是接在 前面一个任务之后的。 我单独运行它发现总卡在map 100 reduce 100的位置,之前的一个任务能够顺利运行而且和这个差别不大,应该不是代码的问题吧,那是为什么呢?

20,808

社区成员

发帖
与我相关
我的任务
社区描述
Hadoop生态大数据交流社区,致力于有Hadoop,hive,Spark,Hbase,Flink,ClickHouse,Kafka,数据仓库,大数据集群运维技术分享和交流等。致力于收集优质的博客
社区管理员
  • 分布式计算/Hadoop社区
  • 涤生大数据
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧