【框架解析】Hadoop系统分析(十)--对象序列化
来源:互联网 发布:用matlab解决优化问题 编辑:程序博客网 时间:2024/06/10 00:46
hadoop的内部数据传输涉及到三个角色之间的数据传输:
- Client - NameNode
- Client - DataNode
- DataNode - NameNode
- DataNode - DataNode
之间的通信使用的是rpc方式,那么rpc的过程就需要涉及对象的序列化。
hadoop的源码中实现了两套序列化,一套是封装了java默认的java.io.Serializable方式,但是hadoop内部使用的是自己实现的org.apache.hadoop.io.Writable方式,而hadoop日常使用到的可序列化对象基本都放在org.apache.hadoop.io包中。
大致的实现结构如下(图中展现了可序列化的java基本类型,其他业务对象没有列出)
- SerializationFactory
序列化工厂,初始化时从配置项io.serializations中获取序列化工具,默认使用org.apache.hadoop.io.serializer.WritableSerialization作为序列化工具。
通过调用getSerializer和getDeserializer来获取序列化与反序列化工具。 - JavaSerialization
封装了java的序列化反序列化工具- JavaSerializationSerializer
使用java.io.Serializable来进行对象的序列化操作 - JavaSerializationDeserializer
使用java.io.Serializable来进行对象的反序列化操作
- JavaSerializationSerializer
- WritableSerialization
封装了hadoop实现的序列化反序列化机制- WritableSerializer
使用org.apache.hadoop.io.Writable实现对象的序列化机制- open
打开数据流,准备往DataOutputStream中写入序列化对象 - close
完成写入序列化对象后,关闭数据流 - serialize
调用Writable.write来执行序列化过程
- open
- WritableDeserializer
使用org.apache.hadoop.io.Writable实现对象的反序列化机制
实例化时需要传入进行deserializer的对象的对应Class。- open
打开DataInputStream,准备读取deserilizer时需要的数据 - close
deserilizer完毕时关闭DataInputStream - deserialize
调用对象的Writable.readFields方法进行deserilizer
- open
- WritableSerializer
- Writable
序列化反序列化接口,只有两个方法分别用于序列化写数据与反序列化读数据- write
序列化时将数据从对象写入到输出流 - readFields
反序列化时将数据从输入流读取到对象中 - 默认实现
实现 对应于java MapWritableMapSortedMapWritable可排序MapArrayWritable数组TwoDArrayWritable二维数组
- write
- WritableComparable
可进行比较的可序列化对象,集成了Writable与Comparable接口。默认实现 对应于java BooleanWritablebooleanTextStringNullWritablenullFloatWritablefloatIntWritableintBytesWritablebyte[]ByteWritablebyteLongWritablelongDoubleWritabledoubleVIntWritableint(可变长度int,在序列化时会进行压缩)VLongWritablelong(可变长度long,在序列化时会进行压缩)ObjectWritableObject - ObjectWritable
ObjectWritable相对特殊,它能够包装其他对象后进行序列化反序列化,序列化后的格式如下:对象名称对象内容支持的对象有
java基本类型,包括Boolean,Character,Byte,Short,Integer,Long,Float,Double,null数组ArrayString其他Writable
- 【框架解析】Hadoop系统分析(十)--对象序列化
- 【框架解析】Hadoop系统分析(三)--namenode format
- 【框架解析】Hadoop系统分析(四)--namenode regular
- 【框架解析】Hadoop系统分析(五)--namenode其他
- 【框架解析】Hadoop系统分析(六)--secondarynamenode
- 【框架解析】Hadoop系统分析(八)--editlog管理
- 【框架解析】Hadoop系统分析(九)--Http服务
- 【框架解析】Hadoop系统分析(十一)--RPC
- 【框架解析】Hadoop系统分析(一)--shell命令汇总
- 【框架解析】Hadoop系统分析(二)--代码模块汇总
- 【框架解析】Hadoop系统分析(七)--namenode后台进程
- hadoop序列化框架
- 【hadoop】 3005-hadoop对象序列化编码
- 【hadoop】 3006-hadoop对象序列化排序
- RPC框架-对象序列化
- Xstream xml序列化.解析框架
- Hadoop RPC 框架解析
- Java对象序列化详细解析
- js得到表格中莫一列的值
- Winsock API: bind
- D3D中的AGP内存、系统内存、显存的理解
- 存储过程
- 遇到的eclipse的问题
- 【框架解析】Hadoop系统分析(十)--对象序列化
- 运动是最佳健康良药
- 2013年手机浏览器如何站着把钱挣了?
- 最小矩阵差——有上下界的网络流问题
- 点击Android主菜单应用,直接进入Dialog对话框
- 获得选中的checkbox的value
- JS中void(0)的含义
- MySQLReport分析报告四
- This Handler class should be static or leaks might occur