Avro JSON 序列化

摘要

Schema究竟是什么,Avro和JSON的关系,Avro的序列化与反序列化,对象容器文件。

Schema究竟是什么?

Apache Avro简介中并不能确切的理解schema究竟是什么。通过阅读官方文档,总结如下:

  • schema是一种metadata(元数据,是用于描述数据的数据),用于描述avro数据;
  • schema通过JSON定义,下面是一个record类型的schema:

    {
        "type": "record",
        "name": "test",
        "fields" : [
            {"name": "a", "type": "long"},
            {"name": "b", "type": "string"}
        ]
    }
  • 解析avro数据(来自对象容器文件或序列化数据)时,必须根据数据的schema进行分析;

    通常,schema和其描述的数据一起存放,例如:在avro支持的对象容器文件(Object Container File)中就在头部包含了文件中存储的数据的schema;在RPC应用中,通信双方也必须确保拥有对方所发送数据的schema。

Avro与JSON的类型映射

1240

Avro数据的序列化和反序列化

Avro指定两种序列化方法:

  • 二进制:更小、更快,用于大部分应用中;
  • JSON:易读,常用于调试和基于web的应用中;

序列化原则:深度优先、从左到右。

序列化之后的数据,可以通过反序列化而得到原数据(首先获取schema是必须的)。

对象容器文件(Object Container File)

对象容器文件是avro定义的一种文件格式。包含如下内容:

  • Four bytes, ASCII 'O', 'b', 'j', followed by 1.
  • file metadata, including the schema.
  • The 16-byte, randomly-generated sync marker for this file.
  • one or more file data blocks.

注意:

  • 文件中存储的所有数据必须对应于头部的schema(avro.schema);
  • 所有数据必须采用二进制序列化;
  • 存储的数据可以压缩(deflate),也可以不压缩(null);

JSON与Avro可以互转吗?

可以!参考序列化和反序列化。

相关链接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章