共计 1379 个字符,预计需要花费 4 分钟才能阅读完成。
Hadoop2.2 (测试环境,不过个人感觉 1.X 和 2.X 的自定义类型应该是一致的,没做过对比)
自定义类部分代码如下所示:
@Override
public void write(DataOutput out) throws IOException {
log.info(“in write()*************************\nvalue:”+this.value+”\ndir:”+this.parentDirName);
value.write(out);
parentDirName.write(out);
}
@Override
public void readFields(DataInput in) throws IOException {
log.info(“in read()*******************\nvalue:”+this.value+”\ndir:”+this.parentDirName);
value.readFields(in);
parentDirName.readFields(in);
}
在使用这个自定义类作为 value 的时候出现下面的错误:
这里可以看到,在 write 方法里面是有值的,但是在 read 方法的时候出现的值是 null。几经排查,发现是定义的时候有个地方没有注意。
在构造方法中,我第一次使用的是下面的代码,第二次是把其中的注释地方去掉了,然后就没有出现 NullPointerException 了。
public JoinValueWritable(){
// this(new Text(),new Text());
}
public JoinValueWritable(Text value ,Text parentDirName){
this.value=value;
this.parentDirName=parentDirName;
}
这里自定义类应该是要调用一个默认的无参的构造方法,如果里面什么都没有,那么就会出现错误。所以里面就需要加上一个有参数构造方法或者写上 set 方法也行。
相关阅读 :
Ubuntu 13.04 上搭建 Hadoop 环境 http://www.linuxidc.com/Linux/2013-06/86106.htm
Ubuntu 12.10 +Hadoop 1.2.1 版本集群配置 http://www.linuxidc.com/Linux/2013-09/90600.htm
Ubuntu 上搭建 Hadoop 环境(单机模式 + 伪分布模式)http://www.linuxidc.com/Linux/2013-01/77681.htm
Ubuntu 下 Hadoop 环境的配置 http://www.linuxidc.com/Linux/2012-11/74539.htm
单机版搭建 Hadoop 环境图文教程详解 http://www.linuxidc.com/Linux/2012-02/53927.htm
搭建 Hadoop 环境(在 Winodws 环境下用虚拟机虚拟两个 Ubuntu 系统进行搭建)http://www.linuxidc.com/Linux/2011-12/48894.htm
更多 Hadoop 相关信息见 Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13