• Avro介绍


      官网地址 :  http://avro.apache.org/

            GitHub:https://github.com/apache/avro/

      Avro是一个数据序列化系统。提供了以下功能和特性:

    • 丰富的数据结构
    • 一个紧凑的,生成速度快速的二进制数据格式
    • 一个容器文件,用于存储持久化数据
    • 远程过程调用(RPC)
    • 与动态语言的简单集成。读取或写入数据文件不需要代码生成,也不需要使用或实现RPC协议。代码生成作为一种可选的优化,只是为静态类型语言的集成而实现。

      Avro在序列化时依赖模式文件(schema),当Avro读取数据和写入数据时,都需要提供模式文件。这样Avro就可以预先知道数据的类型,不用对数据进行预先检测而可以写入每个数据,从而使序列化既快又小。由于数据及其模式是完全自描述的,因此这也便于使用动态脚本语言。

      当Avro数据存储在文件中时,对应的模式文件也会随之存储,因此以后任何程序都可以处理该数据文件。如果读取数据的程序期望使用其他模式,则由于这两种模式文件的存在,因此可以轻松解决。

      在Avro用于RPC时,RPC的客户端和服务端会在建立握手连接时交换模式文件(可以对其进行优化,因为对于大多数远程调用而言,实际上不需要传输任何模式文件)。建立连接后,由于客户端和服务器都拥有对方的完整模式,因此可以轻松解决相同命名字段,缺失字段,多余字段等之间的对应关系。 

      Avro模式是使用JSON定义的 这有助于以已经具有JSON库的语言实现。

      Avro提供的功能类似于Thrift, Protocol Buffer等系统。Avro在以下基本方面与这些系统不同。  

    • 动态类型:Avro不需要生成代码。数据始终伴随着一个schema,该schema允许对数据进行全面处理而无需代码生成,静态数据类型等。这有助于构建通用数据处理系统和语言。
    • 未标记的数据:由于在读取数据时存在schema,因此需要用数据编码的类型信息少得多,因些序列化的内容相对比较小。
    • 没有手动分配的字段ID:当模式更改时,在处理数据时,旧模式和新模式都始终存在,因此可以使用字段名称以符号方式解决差异。

           补充:之所以Hadoop的创始人Doug Cutting会在已有许多现成的RPC系统的情况下,再开发Avro,个人认为原因主要如下:

    • 现有的RPC系统在数据序列时必须要先生成数据的定义原件,然后再根据定义文件生成相应的代码,显得不够灵活。
    • 现有的RPC系统都不是为大数据应用场景而设计的,在远程传输海量数据时的性能不能让人满意,而Avro在设计时就采用了一些例如列式存储这样的优化手段。
    • 重新设计一套RPC系统,更利于与Hadoop生态圈各类框架的集成
  • 相关阅读:
    PHP实现畅言留言板和网易跟帖样式
    关于MySql中自增长id设置初始值
    建议
    P3P解决cookie存取的跨域问题
    学习模板实例
    Mac 安装Bower
    webstorm for mac 破解步骤
    Mac上搭建php开发环境
    ios 开发之 -- 极光推送,发送自定义消息,进入制定页面
    ios开发之 -- 强制横屏
  • 原文地址:https://www.cnblogs.com/hzhuxin/p/12269248.html
Copyright © 2020-2023  润新知