Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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
Java Hadoop新API的类强制转换异常_Java_Hadoop_Mapreduce - Fatal编程技术网

Java Hadoop新API的类强制转换异常

Java Hadoop新API的类强制转换异常,java,hadoop,mapreduce,Java,Hadoop,Mapreduce,我试图用MapReduce框架写出一些简单的代码。以前,我使用MapRedPackage实现,并且能够将输入格式类指定为KeyvalueTextInputFormat,但在使用mapreduce的新Api中,不存在此类。我尝试使用TextInputFormat.class,但仍然出现以下异常 - job_local_0001 java.lang.ClassCastException: org.apache.hadoop.io.LongWritable cannot be cast to org.

我试图用MapReduce框架写出一些简单的代码。以前,我使用MapRedPackage实现,并且能够将输入格式类指定为KeyvalueTextInputFormat,但在使用mapreduce的新Api中,不存在此类。我尝试使用TextInputFormat.class,但仍然出现以下异常

- job_local_0001
java.lang.ClassCastException: org.apache.hadoop.io.LongWritable cannot be cast to org.apache.hadoop.io.Text
    at com.hp.hpl.mapReduceprocessing.MapReduceWrapper$HitFileProccesorMapper_internal.map(MapReduceWrapper.java:1)
    at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:621)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:305)
    at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:177)
下面是代码的一个示例片段

Configuration conf = new Configuration();
         conf.set("key.value.separator.output.line", ",");    

        Job job = new Job(conf, "Result Aggregation");
        job.setJarByClass(ProcessInputFile.class);

        job.setInputFormatClass(TextInputFormat.class);
        job.setOutputFormatClass(TextOutputFormat.class);

        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(Text.class);

        job.setMapperClass(MultithreadedMapper.class);
        MultithreadedMapper.setMapperClass(job, HitFileProccesorMapper_internal.class);
        MultithreadedMapper.setNumberOfThreads(job, 3);
        //job.setMapperClass(HitFileProccesorMapper_internal.class);
        job.setReducerClass(HitFileReducer_internal.class);

        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(Text.class);



        FileInputFormat.addInputPath(job, new Path(inputFileofhits.getName()));
        FileOutputFormat.setOutputPath(job, new Path(ProcessInputFile.resultAggProps
                .getProperty("OUTPUT_DIRECTORY")));

        try {
            job.waitForCompletion(true);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

请务必让我知道要进行哪些配置更改,以避免类强制转换异常

当MapReduce试图作为键/值传递的内容与Map或Reduce类模板化的内容存在类型不匹配时,通常会发生这种情况

您说您正在使用
KeyvalueTextInputFormat
,但在您的代码中您正在使用
TextInputFormat
以“位置,行”的形式传递记录

我猜您的映射器的类型是
。因此,MapReduce正试图将
TextInputFormat
提供给
Text
LongWritable
转换为


我建议您要么
KeyvalueTextInputFormat
,要么将映射器的类型更改为

,这通常发生在MapReduce尝试作为键/值传递的内容与Map或Reduce类模板化的内容存在类型不匹配时

您说您正在使用
KeyvalueTextInputFormat
,但在您的代码中您正在使用
TextInputFormat
以“位置,行”的形式传递记录

我猜您的映射器的类型是
。因此,MapReduce正试图将
TextInputFormat
提供给
Text
LongWritable
转换为


我建议您要么
KeyvalueTextInputFormat
,要么将映射器的类型更改为

嗨,谢谢您的回复。。但是我提到我以前使用过KeyValueTextInputFormat。。我目前使用的新版hadoop中没有此类。。我已经将我的映射器修改为Longwritable。。但我仍然好奇如何避免类强制转换异常。。提前谢谢你什么意思你还想知道如何避免?为了避免这种情况,您需要确保映射器中的
模板类型与输入格式匹配。您好,欢迎回复。。但是我提到我以前使用过KeyValueTextInputFormat。。我目前使用的新版hadoop中没有此类。。我已经将我的映射器修改为Longwritable。。但我仍然好奇如何避免类强制转换异常。。提前谢谢你什么意思你还想知道如何避免?为了避免这种情况,您需要确保映射器中的
模板类型与输入格式匹配。