美文网首页
Avro JSON 序列化

Avro JSON 序列化

作者: 神农民 | 来源:发表于2016-12-06 00:38 被阅读517次

摘要

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的类型映射

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可以互转吗?

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

相关链接


阅读原文 | 作者官网 | 公众号 | Feed | 订阅 | 发私信

相关文章

网友评论

      本文标题:Avro JSON 序列化

      本文链接:https://www.haomeiwen.com/subject/zhilmttx.html