什么是数据序列化系统?

18
根据 Apache AVRO 项目,"Avro 是一个序列化系统"。那么说 Avro 是数据序列化系统,是指它是产品还是 API?
此外,我不太清楚数据序列化系统的含义是什么?目前我的理解是,它是定义如何在网络上传递数据对象的协议。能否有人以更简单易懂的方式解释一下,使那些具有有限分布式计算背景的人们更容易理解呢?
提前感谢!
2个回答

30
当Doug Cutting编写Hadoop时,他决定标准的Java序列化方式(Java Object Serialization)不能满足他对Hadoop的要求。具体而言,这些要求是:
  1. 将数据序列化为紧凑的二进制格式。
  2. 快速,既包括性能又包括允许数据传输的速度。
  3. 可互操作,使得其他语言更容易地插入Hadoop中。
正如他所描述的Java序列化:

它看起来很庞大,我认为我们需要一些瘦小而精干的东西

因此,他们没有使用Java序列化而是编写了自己的序列化框架。 Java序列化的主要问题在于它将被序列化的每个对象的类名写入流中,该类的每个后续实例都包含对第一个实例的5字节引用,而不是类名。
除了减少流的有效带宽外,这还会导致随机访问和对序列化流中记录进行排序时出现问题。因此,Hadoop序列化不写类名或所需的引用,并假定客户端知道预期类型。
Java序列化还为每个反序列化的对象创建一个新对象。实现Hadoop序列化的Hadoop Writables可以被重用。因此,有助于提高MapReduce的性能,后者实际上对数十亿条记录进行序列化和反序列化。
Avro适用于Hadoop,因为它以不同的方式处理序列化。客户端和服务器交换描述数据流的模式。这有助于使其快速,紧凑,并且重要的是使不同语言的混合更容易。
因此,Avro定义了一个序列化格式,一种客户端和服务器之间通信的协议以及一种在文件中紧凑地保存数据的方法。
希望这有所帮助。我认为了解Hadoop历史将有助于理解为什么Avro是Hadoop的子项目以及它的目的是什么。

3
非常感谢!这非常有帮助,我认为我需要一些Hadoop的背景知识才能理解它的子项目 :) - Yang

3

如果你必须在有限的文件中存储类似于层次结构或数据结构实现细节的信息,并将该信息传递到网络上,你可以使用数据序列化。它类似于理解xml或json格式。优点是,被转换为任何序列化格式的信息都可以反序列化,以重新生成已序列化的类、对象、数据结构等。

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

这是数据序列化格式列表的链接。如需更多信息,请留言! :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接