Hadoop mapreduce作业:调用reducer时映射程序未调用

Hadoop mapreduce作业:调用reducer时映射程序未调用,hadoop,mapreduce,Hadoop,Mapreduce,我有四个类,分别是MapperOne,ReducerOne,MapperTwo,ReducerTwo。我想要一个链。MapperOne-->还原器-->输出文件生成,输入到MapperTwo-->MapperTwo-->还原器tw-->最终输出文件 我的驾驶员等级代码: 我的MapperOne和ReducerOne执行正确,输出文件存储在正确的路径中。现在,当执行第二个作业时,只调用reducer。下面是我的MapperTwo和ReducerTwo代码 制图员2 公共类StockMapperTw

我有四个类,分别是MapperOne,ReducerOne,MapperTwo,ReducerTwo。我想要一个链。MapperOne-->还原器-->输出文件生成,输入到MapperTwo-->MapperTwo-->还原器tw-->最终输出文件

我的驾驶员等级代码: 我的MapperOne和ReducerOne执行正确,输出文件存储在正确的路径中。现在,当执行第二个作业时,只调用reducer。下面是我的MapperTwo和ReducerTwo代码

制图员2 公共类StockMapperTwo扩展映射器{

public void map(LongWritable key, Iterable<Text> values, Context context) throws IOException, InterruptedException{
    System.out.println("------ MAPPER 2 CALLED-----");

    for(Text val: values){
        System.out.println("KEY: "+ key.toString() + "   VALUE: "+ val.toString());
        //context.write(new Text("mapper2"), new Text("hi"));
        context.write(new LongWritable(2), new Text("hi"));
    }

}
 }
public void映射(LongWritable键、Iterable值、上下文上下文)抛出IOException、interruptedeexception{
System.out.println(“----MAPPER 2调用---”);
用于(文本值:值){
System.out.println(“KEY:+KEY.toString()+”值:+val.toString());
//编写(新文本(“mapper2”)、新文本(“hi”);
编写(新的LongWritable(2),新的文本(“hi”);
}
}
}
减速器二
public类stockreducer两个扩展Reducer{
public void reduce(LongWritable键、Iterablevalues、Context上下文)抛出IOException、InterruptedException{
System.out.println(“调用了REDUCER 2”);
写(新文本(“你好”)、新文本(“你好”);
}
}
我对这个配置的怀疑是
  • 为什么即使在job2.setMapperClass(StockMapperTwo.class)中设置了映射器,也会跳过映射器

  • 如果我不设置job2.setMapOutputKeyClass(LongWritable.class); job2.setMapOutputValueClass(Text.class);然后即使是reducer也不会被调用。这个错误就要来了

    java.io.IOException:map中的键类型不匹配:预期为org.apache.hadoop.io.Text,received org.apache.hadoop.io.LongWritable 位于org.apache.hadoop.mapred.MapTask$MapOutputBuffer.collect(MapTask.java:870) 位于org.apache.hadoop.mapred.MapTask$NewOutputCollector.write(MapTask.java:573) 位于org.apache.hadoop.mapreduce.taskInputOutContext.write(taskInputOutContext.java:80) 位于org.apache.hadoop.mapreduce.Mapper.map(Mapper.java:124) 位于org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144)


  • 这是怎么发生的?请帮忙。我无法正确调用映射器和还原器。请引导我。

    很抱歉发布此问题。我没有注意到我的制图器写错了

    相反

    public void map(LongWritable key,Text values, Context context) throws IOException, InterruptedException{
    
    我一直都是这样

    public void map(LongWritable key, Iterable<Text> values, Context context) throws IOException, InterruptedException{
    
    public void映射(LongWritable键、Iterable值、上下文上下文)抛出IOException、interruptedeexception{
    

    我花了很长时间才观察到错误。我不确定为什么没有正确的错误来显示错误。不管怎样,现在问题解决了。

    我正要指出同样的问题,很高兴你抓住了它。
    public void map(LongWritable key,Text values, Context context) throws IOException, InterruptedException{
    
    public void map(LongWritable key, Iterable<Text> values, Context context) throws IOException, InterruptedException{