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可以互轉嗎?

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

相關鏈接

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