序列化框架Kyro原理与大数据组件中的应用
【摘要】 Keyo相关知识Kryo 序列化实现原理总结1、先序列化类型(Class实例),并根据类型返回相应的序列化器(Serializer)。2、序列化该类型的值(Object)。3、如果是自定义类型(即不是Java的primitive type),例如(cn.uce.demo.Student),则返回的值序列化器为DefaultSerializers$FieldSerializer,然后一个字段一...
Keyo相关知识
Kryo 序列化实现原理总结
1、先序列化类型(Class实例),并根据类型返回相应的序列化器(Serializer)。
2、序列化该类型的值(Object)。
3、如果是自定义类型(即不是Java的primitive type),例如(cn.uce.demo.Student),则返回的值序列化器为DefaultSerializers$FieldSerializer,然后一个字段一个字段的序列化,当然其序列化类型也是,先类型再值的模式,递归进行,最终完成。
4、引入了对象图(object graph)的概念来消除循环依懒的序列化。已序列化的对象,在循环引用时,只是用一个int类型来表示该对象值,类似一种缓存的概念。
https://cloud.tencent.com/developer/article/1443590
查看keyo的日志
com.esotericsoftware.minlog.Log.TRACE();
或者
import com.esotericsoftware.minlog.Log;
import static com.esotericsoftware.minlog.Log.*;
// ...
Log.set(LEVEL_TRACE);
Kryo源码:
主入口
Kryo.writeObject kryo.readObject
writtenObjects readObjects depth
类记录名字和ID
对象记录ID和内容,同一个对象再次遇到时只记录ID。
使用变长int,long
FieldSerializer遍历对象的属性来序列化.
Provided serializers / supporting classes:
https://github.com/magro/kryo-serializers/
各开源组件对Kryo的使用
是否使用对象引用是可配置的比如spark中。spark.kryo.referenceTracking
Flink是出于性能和Bug原因referenceTrack关了又开
https://issues.apache.org/jira/browse/FLINK-3267
Hive对其他序列化的支持在这个单去掉了:
Remove javaXML serialization
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
ypc2020/06/08 06:42:251楼编辑删除举报