文章目录

  • 一、Avro是什么?
  • 二、使用步骤
    • 1. 下载
  • 三、 Java中使用Avro
    • 1. 新建maven项目
    • 2. 定义模式
    • 3. 创建用户
  • 三、 Avro序列化
  • 四、 Avro反序列化
  • 五、 没有代码生成的序列化
  • 六、 没有代码生成的去序列化

一、Avro是什么?

Avro是一个独立于编程语言的数据序列化系统,由Hadoop的创始人Doug Cutting创建。为了解决Hadoop中writable类型的不足(缺乏语言的可移植性)
avro模式通常用json编写,数据通常采用二进制格式编码。
优点:

  1. 丰富的数据结构。
  2. 紧凑、快速、二进制的数据格式。
  3. 一个容器文件,用来存储持久性数据。
  4. 远程程序呼叫 (RPC)。
  5. 与动态语言的简单集成。代码生成不需要读取或编写数据文件,也不需要使用或实施 RPC 协议。代码生成作为可选优化,仅值得针对静态键入的语言实施。
  6. schema和data同时存放在文件中存储,block之间有同步标记。
  7. avro是可切割的

数据序列化:
java–>ObjectOutputStream/ObjectInputStream
hadoop–>Writable–>DataOutputStream/DataInputStream

二、使用步骤

1. 下载

  1. 官网地址http://avro.apache.org/
  2. 点击进去后,下拉点击下载,进入最新版本
  3. 下拉点击下载
  4. 点击图中链接
  5. 下载稳定版
  6. 找到Java点进去
  7. 下载下面红框四个

三、 Java中使用Avro

参考官方文档,http://avro.apache.org/docs/current/gettingstartedjava.html,使用Java代码实现avro串行化

1. 新建maven项目

在maven中的pom.xml的<dependencies></dependencies>中加入下面代码,根据自己版本来

<dependency><groupId>org.apache.avro</groupId><artifactId>avro</artifactId><version>1.10.2</version>
</dependency>

<build> <plugins> </plugins></build>中加入下面代码

以及 Avro Maven 插件(用于执行代码生成):
<plugin><groupId>org.apache.avro</groupId><artifactId>avro-maven-plugin</artifactId><version>1.10.2</version><executions><execution><phase>generate-sources</phase><goals><goal>schema</goal></goals><configuration><sourceDirectory>${project.basedir}/src/main/avro/</sourceDirectory><outputDirectory>${project.basedir}/src/main/java/</outputDirectory></configuration></execution></executions>
</plugin>
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.8</source><target>1.8</target></configuration>
</plugin>

我的maven项目结构

2. 定义模式

  1. 先下载avro-tools-1.10.2.jar。

  2. 创建schema文件user.avro。在自己电脑盘新建一个文件在此文件下创建一个文本。
    (注意:不要是txt文件,是avsc文件)

  3. 用记事本打开此文件,在文件中加入下面代码。

{"namespace": "cn.itcast.myavro.model",  //后面的是编译成功会出现文件名,下面步骤会用到(是自己的maven项目下的包名,这个是我的包名,编译好的文件会在这个包中)"type": "record","name": "User","fields": [{"name": "name", "type": "string"},{"name": "favorite_number",  "type": ["int", "null"]},{"name": "favorite_color", "type": ["string", "null"]}]
}
  1. 编译schema,生成Java 代码
java -jar /path/to/avro-tools-1.10.2.jar compile schema <schema file> <destination>
例如:java -jar /path/to/avro-tools-1.10.2.jar compile schema user.avsc .


返回user.avsc文件所在的路径下,发现已经编译成功,出现了一个cn文件夹

  1. 将整个cn文件夹直接复制到eclipse下maven项目中src/main/java下,看到有个编译好的user.Java文件

3. 创建用户

编写Java代码创建用户,在原文件名是App.Java(我改名成下面这个名字)下,将它们串序到磁盘上的数据文件,然后读回文件并取消对用户对象的隔离。

三、 Avro序列化

序列化代码

代码中把文件写到d盘下(可修改路径)

四、 Avro反序列化

  1. 创建一个新类,取名Deserializing。从磁盘反序列化用户
  2. 代码

五、 没有代码生成的序列化

Avro 中的数据始终存储在其相应的模式中,这意味着无论我们是否提前知道该模式,我们都可以随时读取序列化项目。这使我们能够在没有代码生成的情况下执行序列化和去序列化。

无需使用代码生成:我们将创建一些用户,将它们序列化为磁盘上的数据文件,然后读回文件并取消对用户对象的隔离。

由于我们不使用代码生成,我们使用通用记录来表示用户。通用记录使用该模式来验证我们只指定有效字段。

六、 没有代码生成的去序列化

Avro下载及使用(序列化,反序列化)相关推荐

  1. java读avro的流_0016-Avro序列化反序列化和Spark读取Avro数据

    1.简介 本篇文章主要讲如何使用java生成Avro格式数据以及如何通过spark将Avro数据文件转换成DataSet和DataFrame进行操作. 1.1Apache Arvo是什么? Apach ...

  2. 0016-Avro序列化反序列化和Spark读取Avro数据

    温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看. 1.简介 本篇文章主要讲如何使用java生成Avro格式数据以及如何通过spark将Avro数据文件转换成DataSet和DataFra ...

  3. avro数据序列化/反序列化

    序列化:把数据加工成特定的格式 反序列化:把特定格式的数据解析成对象 Avro提供了两种序列化和反序列化的方式:一种是通过Schema文件来生成代码的方式,一种是不生成代码的通用方式,这两种方式都需要 ...

  4. Java 序列化反序列化框架比较

    文章目录 一.简介 二.序列化框架 1.JDK 2.XML序列化 3.JSON序列化 4.Hessian 5.Avro序列化 6.Kyro序列化 7.Protostuff 三.序列化框架对比测试 1. ...

  5. java序列化 反序列化_Java序列化– Java序列化

    java序列化 反序列化 Serialization in Java was introduced in JDK 1.1 and it is one of the important feature ...

  6. kafka python框架_Python中如何使用Apache Avro——Apache的数据序列化系统

    了解如何创建和使用基于Apache Avro的数据,以实现更好,更有效的传输. 在这篇文章中,我将讨论Apache Avro,这是一种开源数据序列化系统,Spark,Kafka等工具正在使用该工具进行 ...

  7. 用 XStream 序列化/反序列化 XML 为 Java 对象(实例)

    用 XStream 序列化/反序列化 XML 为 Java 对象(实例) Posted on 2007-06-05 19:06 Stephen Wong 阅读(1224) 评论(0)  编辑 收藏 网 ...

  8. Redis Template使用append方法不起作用的解决办法以及序列化/反序列化的解释

    今天使用Redis Template进行测试发现的问题, 遇到这个错 org.springframework.data.redis.serializer.SerializationException: ...

  9. 序列化反序列化api(入门级)

    定义: java序列化是指把Java对象转换为字节序列的过程:而Java反序列化是指把字节序列恢复为Java对象的过程. 为什么字符串通常也会进行序列化? 对象需要进行序列化的原因:保证对象的状态不变 ...

  10. 敏捷中gwt含义_在GWT中序列化/反序列化Json

    敏捷中gwt含义 JSON和GWT 最近, GWT用户小组中进行了有趣的讨论 ,涉及在客户端对JSON进行序列化/反序列化的最佳实践. 这篇文章旨在突出其重点. 到目前为止,在GWT中有三种将对象转换 ...

最新文章

  1. react 树形菜单_关于React 使用antd组件递归实现左侧菜单导航树(MenusTree)的示例...
  2. 为何计算机科学领域的女性不多?
  3. android Base64加密解密
  4. C/C++语言堆栈指引
  5. MapReduce的简单实例WordCount
  6. objective-C 自定义对象归档的实现
  7. 9读书1-我在义务发财(1)
  8. java数据类型后加三个点...
  9. 使用自定义表类型(SQL Server 2008)
  10. MySQL 数据库管理之 --- SQL 语言进阶二
  11. 推荐系统之GBDT+LR
  12. make makefile cmake qmake都是什么,有什么区别
  13. 关于交换机包转发率1.488Mpps是如何计算出来的?
  14. P4735 最大异或和 01可持久化Trie树模板
  15. Matlab实现二维Goldstein分支切割相位展开算法
  16. 什么大牛不大牛,先A500题再说吧
  17. 前端企业微信开发内嵌H5记录
  18. LPA* 路径搜索算法介绍及完整代码
  19. IOS QQ第三方登陆提交AppleStore 被拒解决
  20. jenkins+pipeline+Amazon_EKS部署java服务

热门文章

  1. POJ 2524 宗教信仰 并查集 基础模板
  2. hMailServer搭建企业邮箱服务器
  3. Xcode证书破解 iphone真机部署
  4. 升级及安装显卡驱动,安装cuda
  5. 天猫魔盒作为无线网卡上网
  6. 只需要把脸对准摄像头就可以实现刷脸支付
  7. ImageNet历年冠军模型
  8. 【宋红康 MySQL数据库】【01】数据库概述
  9. java treemap 方法_Java TreeMap类
  10. AEJoy —— 程序员入门 AE 的一些知识点整理【不定时更新】