18

根据 Apache AVRO 项目,“Avro 是一个序列化系统”。说数据序列化系统,是说avro是产品还是api?

另外,我不确定什么是数据序列化系统?目前,我的理解是它是一个定义数据对象如何通过网络传递的协议。谁能帮助以直观的方式解释它,以使分布式计算背景有限的人更容易理解?

提前致谢!

4

2 回答 2

30

所以当 Doug Cutting 在编写 Hadoop 时,他认为使用 Java 对象序列化(Java Serialization)对 Java 对象进行序列化的标准 Java 方法不能满足他对 Hadoop 的要求。即,这些要求是:

  1. 将数据序列化为紧凑的二进制格式。
  2. 速度要,无论是在性能上还是在传输数据的速度上。
  3. 可互操作,以便其他语言更轻松地插入 Hadoop。

正如他描述的Java序列化:

它看起来又大又多毛,我虽然我们需要一些精简和卑鄙的东西

他们没有使用 Java 序列化,而是编写了自己的序列化框架。Java序列化的主要问题是它将每个被序列化的对象的类名写入流,该类的每个后续实例都包含对第一个的5字节引用,而不是类名。

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

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

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

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

我希望这有帮助。我认为一些 Hadoop 历史将有助于理解为什么 Avro 是 Hadoop 的一个子项目以及它的意义。

于 2010-03-22T04:20:30.850 回答
3

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

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

是序列化格式列表的链接。如果您想了解更多信息,请发表评论!:)

于 2014-11-26T11:01:35.133 回答