根据Apache AVRO项目,“Avro是一个序列化系统”。通过说数据序列化系统,是否意味着avro是产品或api?
另外,我不确定数据序列化系统是什么?现在,我的理解是它是一个定义数据对象如何通过网络传递的协议。任何人都可以帮助以直观的方式解释它,以便分析计算背景有限的人更容易理解吗?
提前致谢!
答案 0 :(得分:27)
因此,当Doug Cutting编写Hadoop时,他认为使用Java Object Serialization(Java Serialization)序列化Java对象的标准Java方法不符合他对Hadoop的要求。即,这些要求是:
他描述了Java序列化:
它看起来很大而且毛茸茸,我虽然需要一些精益而且意味着
他们没有使用Java Serialization,而是编写了自己的序列化框架。 Java序列化的主要问题是它将被序列化的每个对象的类名写入流中,该类的每个后续实例包含对第一个的5字节引用,而不是类名。
除了减少流的有效带宽之外,这还会导致随机访问以及序列化流中记录的排序问题。因此,Hadoop序列化不会编写类名或必需的引用,并假设客户端知道预期的类型。
Java Serialization还为每个反序列化的对象创建一个新对象。实现Hadoop序列化的Hadoop Writable可以重用。因此,有助于提高MapReduce的性能,从而有效地序列化和反序列化数十亿条记录。
Avro适用于Hadoop,因为它以不同的方式接近序列化。客户端和服务器交换描述数据流的方案。这有助于使其快速,紧凑,并且重要的是可以更容易地将语言混合在一起。
所以Avro定义了一种序列化格式,一种用于客户端和服务器通信这些串行流的协议,以及一种在文件中紧凑地保存数据的方法。
我希望这会有所帮助。我认为一些Hadoop历史将有助于理解为什么Avro是Hadoop的子项目以及它的帮助意图。
答案 1 :(得分:0)
如果必须在有限的文件中存储层次结构或数据结构实现细节等信息并通过网络传递该信息,则使用数据序列化。它接近于理解xml或json格式。好处是可以将转换为任何序列化格式的信息反序列化,以重新生成类,对象,数据结构,无论序列化的是什么。
actual implementation-->serialization-->.xml or .json or .avro --->deserialization--->imlementation in original form
Here是序列化格式列表的链接。如果您想了解更多信息请注释! :)