hadoop执行mapreduce过程reduce不执行原因
1.如果你的map过程中没有context.write()是不执行reduce过程的;
2.如果你的map过程中context.write()的map后的的部分数据出现问题,
不符合reduce接受的数据也会不执行reduce
比如说你的日志文件中有一个空行是不符合reduce的接受数据reduce不执行;
原:(会读到空行,不符合reduce的接受数据,reduce不执行)
public static class Map extends Mapper<Object,Text,Text,IntWritable>{ //将输入输出作为string类型,对应Text类型 private static Text newKey=new Text(); //每一行作为一个数据 public void map(Object key, Text value, Context context) throws IOException, InterruptedException{ String line=value.toString();//转为字符串类型 System.out.println(line); String arr[]=line.split(" ");//splite是按照输入的值拆分成数组 newKey.set(arr[0]); int click=Integer.parseInt(arr[1]); context.write(newKey,new IntWritable(click)); System.out.println(newKey+" "+new IntWritable(click)); } }
加判断语句:
public static class Map extends Mapper<Object,Text,Text,IntWritable>{ //将输入输出作为string类型,对应Text类型 private static Text newKey=new Text(); //每一行作为一个数据 public void map(Object key, Text value, Context context) throws IOException, InterruptedException{ String line=value.toString();//转为字符串类型 System.out.println(line); if(!("".equals(line)))//增加控制语句,使得line为”“时能够停止。否则不符合reduce接受的数据不会执行reduce { String arr[]=line.split(" ");//splite是按照输入的值拆分成数组 newKey.set(arr[0]); int click=Integer.parseInt(arr[1]); context.write(newKey,new IntWritable(click)); System.out.println(newKey+" "+new IntWritable(click)); } } }