MapReduce关于类型转换报错记录

简介: MapReduce关于类型转换报错记录

MapReduce关于类型转换报错记录



ad61faea5ea343a28fe757431d8517ed.jpeg



0. 写在前面

  • 实验环境:Ubuntu Kylin16.04
  • Hadoop版本:2.7.2
  • IDE:Eclipse3.8


1. 程序代码


Mapper端


importorg.apache.hadoop.io.IntWritable;
importorg.apache.hadoop.io.LongWritable;
importorg.apache.hadoop.io.Text;
importorg.apache.hadoop.mapreduce.Mapper;
publicstaticclassWordCountMapperextendsMapper<LongWritable, Text, Text, IntWritable> {
@Overrideprotectedvoidmap(LongWritablekey, Textvalue, Contextcontext) throwsIOException, InterruptedException {
String[] strs=value.toString().split(" ");
for (Stringstr : strs) {
context.write(newText(str), newIntWritable(1));
  }
    }
}


Reducer端

importorg.apache.hadoop.io.IntWritable;
importorg.apache.hadoop.io.LongWritable;
importorg.apache.hadoop.io.Text;
importorg.apache.hadoop.mapreduce.Reducer;
publicstaticclassWordCountReduceextendsReducer<Text, IntWritable, Text, IntWritable> {
@Overrideprotectedvoidreduce(Textkey, Iterable<IntWritable>values, Contextcontext)
throwsIOException, InterruptedException {
intsum=0;
for (IntWritableval : values) {
System.out.println("<"+key+","+val+">");
sum+=val.get();
  }
context.write(key, newIntWritable(sum));
    }
}


Driver端

importjava.io.IOException;
importorg.apache.hadoop.conf.Configuration;
importorg.apache.hadoop.fs.Path;
importorg.apache.hadoop.io.IntWritable;
importorg.apache.hadoop.io.LongWritable;
importorg.apache.hadoop.io.Text;
importorg.apache.hadoop.mapreduce.Job;
importorg.apache.hadoop.mapreduce.Mapper;
importorg.apache.hadoop.mapreduce.Reducer;
importorg.apache.hadoop.mapreduce.lib.input.FileInputFormat;
importorg.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
publicclassTxtCntDemo {
publicstaticvoidmain(String[] args) throwsException {
args=newString[] { "/input", "/output"};
Configurationconf=newConfiguration();
Jobjob=Job.getInstance(conf);/job.setJarByClass(TxtCntDemo.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
job.setMapperClass(WordCountMap.class);
job.setReducerClass(WordCountReduce.class);
job.setPartitionerClass(MyPartitioner.class);
job.setNumReduceTasks(4);
FileInputFormat.addInputPath(job, newPath(args[0]));
FileOutputFormat.setOutputPath(job, newPath(args[1]));
job.waitForCompletion(true);
    }
}



「错误描述」

java.lang.Exception: java.lang.ClassCastException: org.apache.hadoop.io.Text cannot be cast to org.apache.hadoop.io.IntWritable
java.lang.Exception: java.lang.ClassCastException: org.apache.hadoop.io.LongWritable cannot be cast to org.apache.hadoop.io.IntWritable


mapper、reducer、driver分开成3个文件,报Text不可转换成IntWritable,还有LongWritable不能转换成IntWritable的错误


关于第二个错误:Mapper端执行时,key的默认输入是LongWritable类型,把LongWritable类型强行转换成Text类型自然就Error了。


java.lang.Exception: java.lang.ClassCastException: org.apache.hadoop.io.Text cannot be cast to org.apache.hadoop.io.IntWritable
  at org.apache.hadoop.mapred.LocalJobRunner$Job.runTasks(LocalJobRunner.java:462)
  at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:522)
Caused by: java.lang.ClassCastException: org.apache.hadoop.io.Text cannot be cast to org.apache.hadoop.io.IntWritable
  at org.apache.hadoop.mapred.MapTask$NewOutputCollector.write(MapTask.java:715)
  at org.apache.hadoop.mapreduce.task.TaskInputOutputContextImpl.write(TaskInputOutputContextImpl.java:89)
  at org.apache.hadoop.mapreduce.lib.map.WrappedMapper$Context.write(WrappedMapper.java:112)
  at cn.mr.WordCountMapper.map(WordCountMapper.java:15)
  at cn.mr.WordCountMapper.map(WordCountMapper.java:1)
  at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:146)
  at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:787)
  at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
  at org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.run(LocalJobRunner.java:243)
  at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
  at java.util.concurrent.FutureTask.run(FutureTask.java:266)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
  at java.lang.Thread.run(Thread.java:748)



但是同样的代码mapper、reducer、driver直接放在一个文件下就顺利执行MR得出结果


这个属实给我整不会了 😢 😢



2. 参考


https://www.cnblogs.com/1130136248wlxk/p/5010489.html


记录一下

目录
相关文章
|
分布式计算 Ubuntu Hadoop
MapReduce报错:「MKDirs failed to create file」
MapReduce报错:「MKDirs failed to create file」
302 0
MapReduce报错:「MKDirs failed to create file」
|
分布式计算 Ubuntu IDE
执行MapReduce报错:无法分配内存 (errno=12)
执行MapReduce报错:无法分配内存 (errno=12)
205 0
执行MapReduce报错:无法分配内存 (errno=12)
|
分布式计算 资源调度 Java
执行MapReduce的Jar包报错:Exception in thread main ExitCodeException exitCode=1
执行MapReduce的Jar包报错:Exception in thread main ExitCodeException exitCode=1
105 0
执行MapReduce的Jar包报错:Exception in thread main ExitCodeException exitCode=1
|
3月前
|
分布式计算 Hadoop
Hadoop系列 mapreduce 原理分析
Hadoop系列 mapreduce 原理分析
60 1
|
3月前
|
存储 分布式计算 负载均衡
【大数据技术Hadoop+Spark】MapReduce概要、思想、编程模型组件、工作原理详解(超详细)
【大数据技术Hadoop+Spark】MapReduce概要、思想、编程模型组件、工作原理详解(超详细)
146 0
|
2月前
|
分布式计算 Hadoop Java
Hadoop MapReduce编程
该教程指导编写Hadoop MapReduce程序处理天气数据。任务包括计算每个城市ID的最高、最低气温、气温出现次数和平均气温。在读取数据时需忽略表头,且数据应为整数。教程中提供了环境变量设置、Java编译、jar包创建及MapReduce执行的步骤说明,但假设读者已具备基础操作技能。此外,还提到一个扩展练习,通过分区功能将具有相同尾数的数字分组到不同文件。
39 1
|
2月前
|
数据采集 SQL 分布式计算
|
3月前
|
分布式计算 Hadoop Java
Hadoop MapReduce 调优参数
对于 Hadoop v3.1.3,针对三台4核4G服务器的MapReduce调优参数包括:`mapreduce.reduce.shuffle.parallelcopies`设为10以加速Shuffle,`mapreduce.reduce.shuffle.input.buffer.percent`和`mapreduce.reduce.shuffle.merge.percent`分别设为0.8以减少磁盘IO。
|
2月前
|
存储 分布式计算 Hadoop
Hadoop生态系统详解:HDFS与MapReduce编程
Apache Hadoop是大数据处理的关键,其核心包括HDFS(分布式文件系统)和MapReduce(并行计算框架)。HDFS为大数据存储提供高容错性和高吞吐量,采用主从结构,通过数据复制保证可靠性。MapReduce将任务分解为Map和Reduce阶段,适合大规模数据集的处理。通过代码示例展示了如何使用MapReduce实现Word Count功能。HDFS和MapReduce的结合,加上YARN的资源管理,构成处理和分析大数据的强大力量。了解和掌握这些基础对于有效管理大数据至关重要。【6月更文挑战第12天】
83 0