avro

avro

背景

avro是hadoop中的一个子项目,是一个基于二进制数据传输高性能的中间件。
avro支持本地和远程(RPC)调用。基于Http协议的avro远程调用,首先需要定义一个JSON文件作为双方通信的传输协议规范。

特点

  1. 丰富的数据结构
  2. 紧凑、快速的二进制数据格式
  3. 远程过程调用
  4. 简单的动态语言集成

avro vs json

json是一种轻量级的数据传输格式,但对于大数据集,json数据会显得力不从心。json的格式是key:value型,每条记录都需要附上key的名字,对空间浪费十分严重。对于大数据集来说,因为json不够紧凑,且还要加上重复的key信息,不仅会造成存储空间上的浪费,也增加了数据传输的压力,从而影响了整个集群的吞吐量。
采用avro可以比较好地解决此问题。avro序列化后地文件由schema和内容组成。schema为数据地元数据,单独存放在一个JSON文件中,这样一来,数据地元数据只存了一次,相比JSON数据格式地文件,大大缩小了存储容量,也减少了传输带宽。

schema

avro的schema用json表示。schema定义了简单数据类型和复杂数据类型。

基本类型

基本类型没有属性,例如:{“type”: “string”}

类型含义
null空值
boolean布尔值
int32位有符号整数
long64位有符号整数
float单精度浮点数
double双精度浮点数
bytes8位无符号字节序列
string字符串
复杂类型

avro提供了6种复杂类型:record,enum,array,map,union和fixed。

  • Record
{
  "type": "record", 
  "name": "LongList",
  "aliases": ["LinkedLongs"],                      // old name for this
  "fields" : [
    {"name": "value", "type": "long"},             // each element has a long
    {"name": "next", "type": ["null", "LongList"]} // optional next element
  ]
}

name:字段名字(必填)
doc:字段说明文档(可选)
type:一个schema的json对象或者一个类型名字(必填)
default:默认值(可选)
order:排序(可选),只有3个值ascending(默认),descending或ignore
aliases:别名,字符串数组(可选)

  • Enum
{ "type": "enum",
  "name": "Suit",
  "symbols" : ["SPADES", "HEARTS", "DIAMONDS", "CLUBS"]
}

name:枚举类型的名字(必填)
namespace:命名空间(可选)
aliases:字符串数组,别名(可选)
doc:说明文档(可选)
symbols:字符串数组,所有的枚举值(必填),不允许重复数据。

  • Array
{"type": "array", "items": "string"}

items:数组元素的schema

  • Map
{"type": "map", "values": "long"}

Map类型的类型名字是”map”并且只支持一个属性:
values:map值的schema
Map的key必须是字符串。

  • Union
    组合类型,表示各种类型的组合,使用数组进行组合。比如[“null”, “string”]表示类型可以为null或者string。
    组合类型的默认值是看组合类型的第一个元素,因此如果一个组合类型包括null类型,那么null类型一般都会放在第一个位置,这样子的话这个组合类型的默认值就是null。
    组合类型中不允许同一种类型的元素的个数不会超过1个,除了record,fixed和enum。比如组合类中有2个array类型或者2个map类型,这是不允许的。
    组合类型不允许嵌套组合类型。

  • Fixed

{"type": "fixed", "size": 16, "name": "md5"}

混合类型的类型名字是fixed,支持以下属性:
name:名字(必填)
namespace:命名空间(可选)
aliases:字符串数组,别名(可选)
size:一个整数,表示每个值的字节数(必填)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值