微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

3.Hadoop序列化

3.Hadoop序列化

3.1概述

序列化和反序列化

  • 序列化就是把内存中的对象,转换成字节序列,以便于储存到磁盘和网络传输
  • 反序列化就是将收到的字节序列或者是磁盘的持久化数据,转换成内存中的对象

序列化特点

  • 紧凑:高效使用存储空间
  • 快速:读写数据的额外开支较小
  • 可拓展:随着通信协议的升级升级
  • 互操作:支持多语言的交互

3.2自定义bean对象实现序列化接口

  • 必须实现Writeable接口
  • 反序列化时,需要反射调用空参构造函数,必须要有空参构造
public Bean(){
   
}
@Override
public void write(DataOutput out) throws IOException {
	out.writeLong(upFlow);
	out.writeLong(downFlow);
	out.writeLong(sumFlow);
}
@Override
public void readFields(DataInput in) throws IOException {
	upFlow = in.readLong();
	downFlow = in.readLong();
	sumFlow = in.readLong();
}
  • 序列化和反序列化的顺序完全一致
  • 如果要把文件显示文件中,需要重写toString(),可以用"\t"分隔
  • 如果需要将自定义的bean放在key中传输,则还需要实现Comparable接口,因为MapReduce中的Shuffle过程要求对key必须能排序
@Override
public int compareto(FlowBean o) {
	// 倒序排列,从大到小
	return this.sumFlow > o.getSumFlow() ? -1 : 1;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐