Hadoop 源代码分析(三)对象序列化

转载 2013年12月05日 09:45:44
由于Hadoop 的MapReduce 和HDFS 都有通信的需求,需要对通信的对象进行序列化。Hadoop 并没有采用Java 的序列化,而是
引入了它自己的系统。
org.apache.hadoop.io 中定义了大量的可序列化对象,他们都实现了Writable 接口。实现了Writable 接口的一个典型例子如
下:
Java 代码
1. public class MyWritable implements Writable {
2. // Some data
3. private int counter;
4. private long timestamp;
5.
6. public void write(DataOutput out) throws IOException {
7. out.writeInt(counter);
8. out.writeLong(timestamp);
9. }
10.
11. public void readFields(DataInput in) throws IOException {
12. counter = in.readInt();
13. timestamp = in.readLong();
14. }
15.
16. public static MyWritable read(DataInput in) throws IOException {
17. MyWritable w = new MyWritable();
18. w.readFields(in);
19. return w;
20. }
21.}
其中的write 和readFields 分别实现了把对象序列化和反序列化的功能,是Writable 接口定义的两个方法。下图给出了庞大的
org.apache.hadoop.io 中对象的关系。
Hadoop 源代码分析(三)对象序列化 - manny - 你的目标-卓越非凡
 这里,我把ObjectWritable 标为红色,是因为相对于其他对象,它有不同的地位。当我们讨论Hadoop 的RPC 时,我们会提到RPC
上交换的信息,必须是Java 的基本类型,String 和Writable 接口的实现类,以及元素为以上类型的数组。ObjectWritable 对
象保存了一个可以在RPC 上传输的对象和对象的类型信息。这样,我们就有了一个万能的,可以用于客户端/服务器间传输的
Writable 对象。例如,我们要把上面例子中的对象作为RPC 请求,需要根据MyWritable 创建一个ObjectWritable,
ObjectWritable 往流里会写如下信息
对象类名长度,对象类名,对象自己的串行化结果
这样,到了对端,ObjectWritable 可以根据对象类名创建对应的对象,并解串行。应该注意到,ObjectWritable 依赖于WritableFactories,那存
储了Writable 子类对应的工厂。我们需要把MyWritable 的工厂,保存在WritableFactories 中(通过WritableFactories.setFactory)。

Hadoop源代码分析(完整图文版) part 3

Hadoop源代码分析(三五) 除了对外提供的接口,NameNode上还有一系列的线程,不断检查系统的状态,下面是这些线程的功能分析。 在NameNode中,定义了如下线程:   Daemon ...
  • ssrc0604hx
  • ssrc0604hx
  • 2014年11月26日 15:42
  • 1272

Juce源码分析(三)数据的原子操作

在多线程程序中,当多个线程同时访问同一
  • Skilla
  • Skilla
  • 2014年10月27日 09:23
  • 1309

Hadoop源代码分析(三)

由于Hadoop的MapReduce和HDFS都有通信的需求,需要对通信的对象进行序列化。Hadoop并没有采用Java的序列化,而是引入了它自己的系统。org.apache.hadoop.io中定义...
  • xiang20082008
  • xiang20082008
  • 2011年05月12日 13:32
  • 121

Hadoop源代码分析(三)RPC

Hadoop源代码分析(三)RPC 原文:http://caibinbupt.iteye.com/blog/280790 介绍完org.apache.hadoop.io...
  • fover717
  • fover717
  • 2013年04月02日 13:33
  • 732

Hadoop 2.6.0 FSDirectory源代码分析

FSDirectory和FSNamesystem类管理命名空间的状态,FSDirectory 完全是内存的数据结构,它的所有操作都发生在内存中。相反,FSNamesystem把所有的操作都持久化到磁盘...
  • houzhizhen
  • houzhizhen
  • 2016年01月25日 17:49
  • 492

hadoop源码分析(MapReduce)

原文地址:http://wwangcg.iteye.com/category/171858【good 也有其他方面的内容】 hadoop 源码分析(一) jobClient 提交到JobTrac...
  • anhuidelinger
  • anhuidelinger
  • 2013年10月22日 15:40
  • 6071

Hadoop的理论基础来自谷歌的三大论文,以下是三大论文的中文版

 Hadoop的理论基础来自谷歌的三大论文,以下是三大论文的中文版。 Google-File-System :http://blog.bizcloudsoft.com/...
  • yobyin
  • yobyin
  • 2017年08月09日 10:48
  • 229

hadoop源代码分析(完整版)

Hadoop源代码分析(一) Google的核心竞争技术是它的计算平台。Google的大牛们用了下面5篇文章,介绍了它们的计算设施。  GoogleCluster:http://researc...
  • senvil
  • senvil
  • 2015年10月05日 18:27
  • 1540

hadoop的三大核心组件之MapReaduce

Hadoop的三大核心组件之MapReaduce MapReduce是什么? MR是一个分布式计算框架,它是Hadoop的一个程序,不会产生进程。 MR部分需要结合代码来理解学习,由于代码篇幅原...
  • Zonzereal
  • Zonzereal
  • 2018年01月12日 11:25
  • 59

hadoop的三大核心组件之HDFS和YARN

Hadoop的三大核心组件之HDFS和YARN Hadoop集群具体来说包含两个集群:HDFS集群和YARN集群,两者逻辑上分离,但物理上常在一起。 (1)HDFS集群:负责海量数据的存储,集群中...
  • Zonzereal
  • Zonzereal
  • 2017年09月26日 14:42
  • 1430
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hadoop 源代码分析(三)对象序列化
举报原因:
原因补充:

(最多只允许输入30个字)