阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

oozie中运行mapreduce node-action时的常见异常解决方法

134次阅读
没有评论

共计 1127 个字符,预计需要花费 3 分钟才能阅读完成。

在第一次使用 oozie 来管理 mapreduce 工作流时,出现了如下异常:

java.io.IOException: Type mismatch in key from map: expected org.apache.Hadoop.io.LongWritable, recieved org.apache.hadoop.io.Text

at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.collect(MapTask.java:872)

at org.apache.hadoop.mapred.MapTask$OldOutputCollector.collect(MapTask.java:499) 以上错误,相信是大家在刚开始使用 hadoop 的时候都会遇到的错误,出错是因为输出格式的数据类型不匹配。

hadoopOutputCollector 对象默认的存放数据的格式为 <LongWritable,Text>,但在本例中,key 传入的实际值为 Text 类型,所以会报错,现在需要设置其输出格式,改为 <Text,LongWritable> 类型。以前写的 mapreduce 是从 main 方法里进行驱动和运行的,在 main 方法里面设置了如下参数:

conf.setOutputKeyClass(Text.class);

conf.setOutputValueClass(IntWritable.class);

以上参数是设置输出格式(及 key 和 value 类型)。但在 oozie 中,直接配置的是 map 类,无法从 main 方法运行,所以必须指定输出格式,有如下两种方法:

1. 在 map 类里面加入静态代码块(在类初始化的时候就会执行)

 static{
  JobConf conf = new JobConf();
  conf.setOutputKeyClass(Text.class);
  conf.setOutputValueClass(IntWritable.class);
 }

2. 在 oozie 的 workflow.xml 中进行配置,参考如下:

<property>
        <name>mapred.output.key.class</name>
      <value>org.apache.hadoop.io.Text</value>
</property>
<property>
        <name>mapred.output.value.class</name>
        <value>org.apache.hadoop.io.IntWritable</value>
 </property>

注,要在 lib 目录下把 hadoop-core-0.20.2-cdh3u6.jar 包放进去

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计1127字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中