2010-03-21 58 views
16

根据Apache AVRO项目,“Avro是一个序列化系统”。通过说数据序列化系统,这是否意味着avro是产品还是api?什么是数据序列化系统?

另外,我不确定数据序列化系统是什么?现在,我的理解是,它是一个定义数据对象如何通过网络传递的协议。任何人都可以用一种直观的方式帮助解释它,这对分布式计算背景有限的人来说更容易理解吗?

提前致谢!

回答

26

因此,当Doug Cutting编写Hadoop时,他决定使用Java对象序列化(Java Serialization)序列化Java对象的标准Java方法不符合他对Hadoop的要求。即,这些要求是:

  1. 序列化数据为紧凑二进制格式。
  2. 快速,无论在性能上还是数据传输速度有多快。
  3. 可互操作使其他语言更容易插入Hadoop。

正如他描述的Java序列:

它看起来又大又毛茸茸的,我虽然我们需要一些瘦肉,而是使用Java序列化他们写下自己的序列化框架的意思

。 Java序列化的主要问题在于它将每个正在序列化的对象的类名写入流中,该类的每个后续实例都包含对第一个对象的5字节引用,而不是类名。

除了减少流的有效带宽,这也会导致随机访问以及序列化流中记录的排序问题。因此,Hadoop序列化不会写入类名或必需的引用,并且假定客户端知道预期的类型。

Java序列化还为每个反序列化的对象创建一个新对象。实现Hadoop序列化的Hadoop Writable可以重用。因此,有助于提高重复序列化和反序列化数十亿记录的MapReduce的性能。

Avro适合Hadoop,它以不同的方式处理序列化。客户端和服务器交换描述数据流的方案。这有助于使它快速,紧凑,重要的是可以更轻松地将语言混合在一起。

So Avro定义了一个序列化格式,一个用于客户端和服务器的通信这些串行流的协议,以及一种紧凑地保存文件中数据的方法。

我希望这会有所帮助。我认为Hadoop的一些历史记录有助于理解为什么Avro是Hadoop的子项目以及它的意图。

+2

非常感谢!这是非常有用的,我想我需要一点点的hadoop背景,以了解它的子项目:) – Yang 2010-03-22 12:41:33

0

如果您必须在有限的文件中存储层次结构或数据结构实现细节等信息,并通过网络传递该信息,则可以使用数据序列化。它接近理解XML或JSON格式。好处是可以反序列化转换成任何序列化格式的信息,以重新生成类,对象,数据结构,无论序列化如何。

actual implementation-->serialization-->.xml or .json or .avro --->deserialization--->imlementation in original form 

Here是序列化格式列表的链接。评论你是否想要更多的信息! :)