我正在学习Apache Avro,我想知道它在内部是如何表示的。如果我要为同一个问题描述ApacheParquet,我可以说每个Parquet文件都是由row_groups组成的,每个row_groups包含列块,列块有多个不同编码的页面。最后,所有这些的元数据都存储在文件页脚。这个文件表示在Github页面以及它的官方Apache页面中有明确的记录。
为了找到Apache Avro的相同内部表示,我查看了多个页面,如Github页面、Apache Avro的主页和书籍Hadoop权威指南以及更多在线教程,但我无法找到我正在寻找的内容。我知道Apache Avro是面向行的文件格式,每个文件都有架构以及文件中的数据。所有这些都很好,但我想知道如何进一步分解数据以进行内部组织,也许像RDBMS表格的页面。
任何与此相关的指针将受到高度赞赏。
Avro容器文件格式在这里的留档中指定。如果你喜欢简洁的东西,那么维基百科有一个更简洁的描述:
Avro对象容器文件包括:
文件头包括:
对于数据块,Avro指定了两种序列化编码,二进制和JSON。大多数应用程序将使用二进制编码,因为它更小更快。对于调试和基于Web的应用程序,JSON编码有时可能是合适的。
您可以根据它们的引用实现来验证这一点,例如在DataFileWriter.java中-从主create
方法开始,然后查看append(D data)
方法。
二进制对象编码在这里的留档中描述。编码数据只是对编码对象(或多个对象)的遍历,每个对象和字段都按照留档中的描述进行编码。