Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop:未调用reducer_Hadoop_Mapreduce_Reducers - Fatal编程技术网

Hadoop:未调用reducer

Hadoop:未调用reducer,hadoop,mapreduce,reducers,Hadoop,Mapreduce,Reducers,我知道这是一个非常基本的问题,但我无法找到我在哪里犯了错误。我的减速器没有从驱动程序代码中调用。如果有人能帮助我,我将不胜感激 我的驱动程序代码 package com.mycompany.myorg; 导入java.io.IOException; 导入org.apache.hadoop.conf.Configuration; 导入org.apache.hadoop.fs.Path; 导入org.apache.hadoop.io.IntWritable; 导入org.apache.hadoop.

我知道这是一个非常基本的问题,但我无法找到我在哪里犯了错误。我的减速器没有从驱动程序代码中调用。如果有人能帮助我,我将不胜感激

我的驱动程序代码

package com.mycompany.myorg;
导入java.io.IOException;
导入org.apache.hadoop.conf.Configuration;
导入org.apache.hadoop.fs.Path;
导入org.apache.hadoop.io.IntWritable;
导入org.apache.hadoop.io.Text;
导入org.apache.hadoop.mapreduce.Job;
导入org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
导入org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
导入org.apache.hadoop.util.GenericOptionsParser;
公共级汽车驾驶员{
公共静态void main(字符串args[])引发IOException、ClassNotFoundException、InterruptedException{
Configuration conf=新配置();
String[]otherArgs=新的GenericOptionsParser(conf,args);
if(otherArgs.length!=2){
System.err.println(“指定的输入和输出路径不正确”);
系统退出(-1);
}
//设置作业详细信息
作业=新作业(形态,“汽车平均燃油经济性”);
job.setJarByClass(carsDriver.class);
//job.setJobName(“汽车平均燃油经济性”);
//设置MR作业的输入和输出路径
setInputPaths(作业,新路径(args[0]);
setOutputPath(作业,新路径(args[1]);
//映射器、合并器和还原器类的设置
job.setMapperClass(carsMapper.class);
job.setMapOutputKeyClass(Text.class);
setMapOutputValueClass(IntWritable.class);
//job.setCombinerClass(carsCombiner.class);
job.setReducerClass(carsReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
系统退出(作业等待完成(真)?0:1;
}
}
映射器代码

package com.mycompany.myorg;
导入java.io.IOException;
导入org.apache.hadoop.io.IntWritable;
导入org.apache.hadoop.io.Text;
导入org.apache.hadoop.mapreduce.Mapper;
公共类carsMapper扩展映射器{
私有文本映射键=新文本();
私有最终静态IntWritable mapval=新的IntWritable(1);
公共void映射(对象键、文本值、Mapper.Context上下文)引发IOException、InterruptedException{
System.out.println(“运行映射程序”);
字符串项[]=Value.toString().split(“,”);
System.out.println(items[2]+“”+Integer.parseInt(items[23].toString());
mapkey.set(项目[2]);
set(Integer.parseInt(items[23].toString());
write(mapkey,mapval);
}
}
减速器代码

package com.mycompany.myorg;
导入java.io.IOException;
导入org.apache.hadoop.io.IntWritable;
导入org.apache.hadoop.io.Text;
导入org.apache.hadoop.mapreduce.Reducer;
公共类汽车减速器扩展减速器{
公共void reducer(文本键、Iterable值、reducer.Context上下文)引发IOException、InterruptedException{
System.out.println(“减速机代码”);
Text redKey=新文本();
IntWritable redVal=新的IntWritable();
设置(键);
整数和=0;
整数计数=0;
for(可写入值:值){
sum=sum+val.get();
计数=计数+1;
}
redVal.set((总和/计数));
write(redKey,redVal);
}
}

经过长时间的调试,我发现问题出在reduce override方法上

我曾经

public void reducer
而不是

public void reduce

注意它应该是reduce而不是reducer

你确定它没有被调用多少?
syso
语句可能在提交作业的控制台上不可见。共享作业的outputDirectory上显示的
hadoop fs-ls
。我对此非常确定,因为我从mapper添加了system.out打印,它可以工作,而从reducer不打印。此外,我甚至试图对reducer的调用和仍然相同的输出进行注释。输出应该是键的平均值,但它只是映射器的结果