根据Apache AVRO项目,"Avro是一个序列化系统".通过说数据序列化系统,是否意味着avro是产品或api?
另外,我不确定数据序列化系统是什么?现在,我的理解是它是一个定义数据对象如何通过网络传递的协议.任何人都可以帮助以直观的方式解释它,以便分析计算背景有限的人更容易理解吗?
提前致谢!
因此,当Doug Cutting编写Hadoop时,他认为使用Java Object Serialization(Java Serialization)序列化Java对象的标准Java方法不符合他对Hadoop的要求.即,这些要求是:
将数据序列化为紧凑的二进制格式.
要快,无论是在性能和速度有多快它允许传输的数据.
可互操作,以便其他语言更容易插入Hadoop.
正如他描述的Java序列化:
它看起来很大而且毛茸茸,我虽然需要精益和平均的东西
他们没有使用Java Serialization,而是编写了自己的序列化框架.Java序列化的主要问题是它将被序列化的每个对象的类名写入流,该类的每个后续实例包含对第一个的5字节引用,而不是类名.
除了减少流的有效带宽之外,这还会导致随机访问以及序列化流中记录的排序问题.因此,Hadoop序列化不会编写类名或必需的引用,并假设客户端知道预期的类型.
Java Serialization还为每个反序列化的对象创建一个新对象.实现Hadoop序列化的Hadoop Writable可以重用.因此,有助于提高MapReduce的性能,从而有效地序列化和反序列化数十亿条记录.
Avro适用于Hadoop,因为它以不同的方式接近序列化.客户端和服务器交换描述数据流的方案.这有助于使其快速,紧凑,并且重要的是可以更容易地将语言混合在一起.
因此,Avro定义了一种序列化格式,一种用于客户端和服务器通信这些串行流的协议,以及一种在文件中紧凑地保存数据的方法.
我希望这有帮助.我认为一些Hadoop历史将有助于理解为什么Avro是Hadoop的子项目以及它的帮助意义.