MapReduce 序列化
问:Hadoop数据类型Writable,与Java基本数据类型有什么区别?
答:
代码语言:javascript复制public interface WritableComparable<T> extends Writable, Comparable<T>
Writable实现了WritableComparable接口,间接继承了Writable, Comparable类,实现了序列化、排序的功能。而这两个功能,在MapReduce中非常重要,排序是MapTask、ReduceTask默认操作,在集群中进行数据传输时要进行序列化。
问:Hadoop为什么不用Java内置的序列化方法
答:
Java的序列化框架(Serializable)比较重,对象被序列化后,会携带很多额外信息(校验值、Header、继承体系等),不便于在网络中高效传输。所以Hadoop开发了自己的序列化机制。
问:Hadoop中如何实现自定义序列化
答:
在自定义类中,实现org.apache.hadoop.io.Writable接口,并实现write、readFields方法,完成序列化操作。
代码语言:javascript复制public class Person implements Writable {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "My name is " this.name ", and i'm " this.age " years old.";
}
// 序列化
@Override
public void write(DataOutput out) throws IOException {
out.write(this.name.getBytes());
out.writeInt(this.age);
}
// 反序列化
@Override
public void readFields(DataInput in) throws IOException {
this.setName(in.readLine());
this.setAge(in.readInt());
}
}
今天的单点,你是否get到了呢?每日单点,用5分钟收获一点!今天你打卡了没?
后话
如果有帮助的,记得点赞、关注。在公众号《数舟》中,可以免费获取专栏《数据仓库》配套的视频课程、大数据集群自动安装脚本,并获取进群交流的途径。
我所有的大数据技术内容也会优先发布到公众号中。如果对某些大数据技术有兴趣,但没有充足的时间,在群里提出,我为大家安排分享。