Apache Avro - 内部表示

3
我正在学习Apache Avro,并想知道它在内部是如何表示的。如果我要描述Apache Parquet,我可以说每个Parquet文件由row_groups组成,每个row_group包含column chunks,column chunks具有多个页面和不同的编码。最后,所有这些元数据存储在文件页脚中。该文件表示在Github page和其官方Apache page中都有清晰记录。
为了找到Apache Avro的相同内部表示,我查看了多个页面,例如Github page,Apache Avro的home以及书籍Hadoop definitive guide等在线教程,但我没有找到我要找的内容。我知道Apache Avro是面向行的文件格式,每个文件中都包含模式和数据。这些都没问题,但我想知道数据是如何进一步分解为内部组织的,就像RDBMS表的页面一样。任何与此相关的指针将不胜感激。
1个回答

2
Avro容器文件格式在其文档这里中有详细说明。如果您喜欢简洁明了的东西,那么维基百科描述更为简洁:
一个Avro对象容器文件由以下组成: - 文件头 - 一个或多个文件数据块
文件头包括: - 四个字节,ASCII字符'O'、'b'、'j',后跟Avro版本号1(0x01)(二进制值0x4F 0x62 0x6A 0x01) - 文件元数据,包括模式定义 - 该文件的16字节随机生成的同步标记
对于数据块,Avro指定了两种序列化编码:二进制和JSON。大多数应用程序将使用二进制编码,因为它更小且更快。对于调试和基于Web的应用程序,JSON编码有时可能是合适的。
您可以在其参考实现中验证此内容,例如在DataFileWriter.java中,从主要的create方法开始,然后查看append(D datum)方法。
二进制对象编码在其文档这里中有详细说明。编码数据只是对编码对象(或对象)的遍历,每个对象和字段都按照文档中描述的方式进行编码。

谢谢@jon-hanson。这对我很有帮助。很抱歉我没有在官方网站上找到这些信息。 - Venkatesan Muniappan
@VenkatesanMuniappan 没问题,这就是StackOverflow的用处。 - jon hanson
感谢您的理解。 - Venkatesan Muniappan

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