Avro简单|实用

Avro 就是一款适合大数据的序列化框架
  概述:是序列化和RPC的框架,开始是Apache Hadoop的子件之一,Avro不只可以用于Hadoop而是可以用于多个场景下的序列化,所以单独形成一个新的组件
    www.apache.org ->Projects
    序列化:将对象转化为二进制形式用于传输或者是存储
    反序列化:
   衡量点:
    序列化之后的数据量是否庞大,序列化之后产生二进制数据用于存储或者进行传输,产生的数据量越大存储或者传输时间越长
    序列化/反序列化本身过程所消耗的时间以及所占用的CPU
    序列化之后的数据是否能够跨语言或者跨平台,现在许多项目往往不是靠一门语言完成,而是多门语言来构造的,在异构网络的架构中,需要一个序列化的对象能够被不同的语言进行解析
   java中的原生序列化
    java中的序列化无法做到结构的重用,导致序列化之后的数据量偏大
    java的序列化是将对象转化为字节码,导致序列化之后只能被java反序列化,其他语言解析困难
   序列化框架
    ProtoBuf  Protocal Buffer 协议缓冲 Google
    Thrift    Facebook  2007年贡献给了Apache
    Avro  
   Avro特点
    1:提供了独立于语言的模式文件schema
    2:提供了丰富的数据类型,8中简单类型,6中复杂类型
    3:支持RPC通信
    4:对序列化文件进行压缩
   Avro序列化
    1:创建MAVEN工程->导入Avro所需要的依赖包
    2:修改windows->p->maven->Error/Warnings->ignore
    3:新建资源目录src/main/..
    4:编写一个.avsc文件,利用文件产生对应的类
     {
      "namespace":"avro.pojo",  生成的类存储包名
      "type":"record",
      "name":"Person",   类名
      "fields":                属性
      [
       {"name":"username", "type":"string"},
       {"name":"age", "type":"int"},
       {"name":"no", "type":"string"}
      ]
     }
     选中pom.xml 运行 maven-generate-sources  成功刷新  去掉@Override
    5:数据类型
     基本类型 null   int  long  boolean  string   bytes(对应json格式中的字符串)  float  double
     复杂类型 record(表示序列化) fixed  enums(枚举类型) arrays maps(映射类型) union()

    Person p = Person.newBuilder().setUsername("值")...;
    序列化
     DatumWriter<Person> dw = new SpecificDatumWriter<Person>(Persion.class);              Avro的序列化流
     DataFileWriter<Person> drw = new DataFileWriter<Person>(dw);  //将person序列化到文件中
     dfw.create(schema(表示序列化遵循的格式) p1.getSchema(), new File("a.txt")); 创建文件
     dfw.append(p1);
     dfw.append(p2);
     dfw.close(); 关流
    反序列化
     DatumReader<Person> dr = new SpecificDatumReader<Person>(Person.class);
     //获取一个从文件读取数据的流
     DataFileReader<Person> dfr = new DataFileReader<Person>(dr);
     dfr提供了以迭代器的方式读取对象的途径
     while(dfr.hasNext()){
      Person p = dfr.next();
      Syso(p);
     }
     dfr.close();//关流

 

有点晚了,代码贴上去还要解释,就不贴了。,,ԾㅂԾ,,

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值