【ZooKeeper】zookeeper源码1-序列化机制

那些场景需要使用序列化技术

1、网络中需要进行消息,数据等传输,这些数据需要序列化和反序列化
2、数据需要被持久化到磁盘时

ZooKeeper(分布式协调服务组件+存储系统)
任何一个分布式系统的底层,都必然会有网络通信,这必然要提供一个分布式通信框架和序列化机制。

序列化技术:
1、Java提供的序列化技术
2、Hadoop的序列化技术,类似(Writable+Protobuf)的自定义序列化机制
类似实现:ZooKeeper的序列化
3、protobuf
yarn hbase等都用的protobuf做序列化
NIO+Protobuf 构成网络通信

Java序列化机制

1、class Student implents Serializable
2、序列化过程:类型信息+对象实例的属性
3、特点:笨重,除了实例的属性信息以外,还会序列化这个实例的类型信息
4、Spark默认使用的序列化机制就是Java原生序列化机制,也提供其他序列化方式
5、使用ObjectInputStream和ObjectOutputStream来进行具体的序列化和反序列化

Hadoop序列化机制

两种方式:avro(implements Writable) + protobuf

//Hadoop的序列化 和 反序列化的字段顺序和多少一定要严格一样。否则 序列化和反序列化对不上了
class Student implements Writable {
	int id;
	String name;
	
	//反序列化
	void readFields(DataIn input){
		this.id = input.readInt();
		this.name = input.readUTF();
	}
	//序列化
	void write(DataOut output){
		output.writeInt(id);
		output.writeUTF(name);
	}
}
//ZK内部有一个数据库:ZKDataBase
//冷启动的时候,ZKDataBase需要从磁盘读取DataNode对象恢复到内存中
//ZKDataBase存储了DataTree,DataTree由成千上万的DataNode组成,保存的其他信息,通过标记区分
//类似格式:Hadoop SequenceFile(序列化格式:key=value)

zookeeper-jute序列化项目

jute项目的类比较少,compiler不用看,需要理清类中继承结构,重要的是规范,是抽象,所以主要看接口。有四个接口:
在这里插入图片描述
序列化需要OutputArchive参数,反序列化需要InputArchive参数,他们俩也是两个接口:
在这里插入图片描述
通过OutputArchive写出,其中定义好了,基本类型(writeByte、writeBool、writeInt、writeLong、writeFloat、writeDouble、writeString)、writeRecord用来对象中有成员变量(自定义类)等
主要是InputArchive、OutputArchive的子类实现,均有三种子类实现:XML(特定,3.5版本后舍弃)、CSV(特定,3.5版本后舍弃)、Binary(通用实现)
BinaryInputArchive、BinaryOutputArchive是3.5版本后实现具体序列化的唯一实现类。
序列化机制中提供InputArchive、OutputArchive、Record三种就够了。
RecordWriter、RecordReader、Utils是工具类。
Index接口就是一个Iterator迭代器:done()等同于hasNext(),incr()等同于next(),针对从磁盘文件读一大堆对象时,读一个对象反序列化一个

重点API:
org.apache.jute.InputArchive:3.4.14之前有三种实现,之后只有Binary实现
反序列化需要实现的接口,其中各种 read 开头的方法,都是反序列化方法
在这里插入图片描述
org.apache.jute.OutputArchive:所有进行序列化操作的都是实现这个接口,其中各种 write 开头的方法都是序列化方法
在这里插入图片描述
org.apache.jute.Index:用于迭代数据进行反序列化的迭代器
在这里插入图片描述
org.apache.jute.Record:在 ZooKeeper 要进行网络通信的对象,都需要实现这个接口。里面有序列化和反序列化两个重要的方法

备注:性能上没有protobuf好,有相关知识储备可以用protobuf实现,当然仍有很多组件用jute

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值