当前位置: 首页 > 知识库问答 >
问题:

mapreduce作业:调用reducer时映射器未调用

苍阳成
2023-03-14
public class StockDriver {


public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {
    System.out.println(" Driver invoked------");
    Configuration config = new Configuration();
    config.set("mapreduce.input.keyvaluelinerecordreader.key.value.separator", " ");
    config.set("mapred.textoutputformat.separator", " --> ");

    String inputPath="In\\NYSE_daily_prices_Q_less.csv";

    String outpath = "C:\\Users\\Outputs\\run1";
    String outpath2 = "C:\\UsersOutputs\\run2";

    Job job1 = new Job(config,"Stock Analysis: Creating key values");
    job1.setInputFormatClass(TextInputFormat.class);
    job1.setOutputFormatClass(TextOutputFormat.class);

    job1.setMapOutputKeyClass(Text.class);
    job1.setMapOutputValueClass(StockDetailsTuple.class);
    job1.setOutputKeyClass(Text.class);
    job1.setOutputValueClass(Text.class);

    job1.setMapperClass(StockMapperOne.class);
    job1.setReducerClass(StockReducerOne.class);

    FileInputFormat.setInputPaths(job1, new Path(inputPath));
    FileOutputFormat.setOutputPath(job1, new Path(outpath));

    //THE SECOND MAP_REDUCE TO DO CALCULATIONS


    Job job2 = new Job(config,"Stock Analysis: Calculating Covariance");
    job2.setInputFormatClass(TextInputFormat.class);
    job2.setOutputFormatClass(TextOutputFormat.class);
    job2.setMapOutputKeyClass(LongWritable.class);
    job2.setMapOutputValueClass(Text.class);
    job2.setOutputKeyClass(Text.class);
    job2.setOutputValueClass(Text.class);
    job2.setMapperClass(StockMapperTwo.class);
    job2.setReducerClass(StockReducerTwo.class);


    String outpath3=outpath+"\\part-r-00000";
    System.out.println("OUT PATH 3: " +outpath3 );
    FileInputFormat.setInputPaths(job2, new Path(outpath3));
    FileOutputFormat.setOutputPath(job2, new Path(outpath2));


    if(job1.waitForCompletion(true)){
    System.out.println(job2.waitForCompletion(true));
    }
}

 }
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 class StockReducerTwo extends Reducer<LongWritable, Text, Text, Text>{

public void reduce(LongWritable key, Iterable<Text>values, Context context) throws IOException, InterruptedException{

        System.out.println(" REDUCER 2 INVOKED");

        context.write(new Text("hello"), new Text("hi"));


}
  }

java.io.ioException:映射项中的类型不匹配:应为org.apache.hadoop.io.text,已收到org.apache.hadoop.mapred.maptask$MapOutputBuffer.Collect(Maptask.java:870)在org.apache.hadoop.mapred.maptask$NewOutputCollector.Write(Maptask.java:573)在org.apache.hadoop.mapreduce.taskinputoutputcontext.Write(Taskinputoutpcontext.80)在

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

共有1个答案

白浩气
2023-03-14

很抱歉发了这个问题。我没有注意到我的地图写错了。

基于此

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{
 类似资料:
  • 我试图运行WordCount示例的一个变体,这个变体是,映射器输出文本作为键和文本作为值,而还原器输出文本作为键和NullWritable作为值。 除了地图,减少签名,我把主要的方法是这样的:

  • 减速器 自定义可写类

  • 我试图将批量加载map-reduce定制到HBase中,我遇到了reducer的问题。起初我认为我没有写好reducer,但是在reducer中抛出运行时异常并看到代码工作时,我意识到reducer根本没有运行。到目前为止,我看不出这个问题的一些常见答案有什么问题; 我的配置将mapoutput和output分开。 我的减速器和映射器具有覆盖功能。 我有Iterable,我的reducer输入是(

  • 现在我有一个4阶段的MapReduce作业,如下所示:

  • 我一辈子都不能让我的一个动作叫减速机。我已经在这个应用程序中编写了多个其他动作和减法器,效果非常好。 它是筛选函数的开始。我有一个文本输入字段,在这里我不断跟踪输入字段的状态,并将字段值分配给redux操作。我有一个控制台。记录操作内部,该操作会正确记录每次按键。 我似乎不能理解的是,为什么减速器不是在每个按键调用。我已经尝试了减速器内的多个console.log,但是没有一个被键盘记录下来。 第

  • 我在mapstruct中使用spring boot 2.3.2。 在服务类中,我有一个映射器,它有一个自动连接的注释。 当我调试BillingService类中的getBilling方法时,billingMapper总是空的;