原文地址: https://itweknow.cn/detail?id=70 ,欢迎大家访问。

什么是Avro

Avro是一个独立于编程语言的数据序列化系统。这个项目由Ddoug Cutting(Hadoop之父)创建,目标是解决Hadoop中Writable类型缺乏语言的可移植性的不足。Avro模式通常采用JSON来写,数据则采用二进制格式编码,也可采用基于JSON的数据编码方式。

Avro的数据类型和模式

Avro定义了一些基本的数据类型,我们可以用他们来构建应用特定的数据结构。下面的表格我们列举了Avro的基本类型。

类型

描述

模式示例

null

空值

“null”

boolean

二进制值

“boolean”

int

32位带符号整数

“int”

long

64位带符号整数

“long”

float

单精度(32位)浮点数

“float”

double

双精度(64位)浮点数

“double”

bytes

8位无符号字节序列

“bytes”

string

Unicode字符序列

“string”

还有一些复杂的类型如下表所示:

类型

描述

模式示例

array

一个排过序的对象集合。特定数组中的所有对象必须模式相同。

{“type”: “array”,“items”: “long”}

map

未排过序的键-值对。键必须是字符串,值可以是任何一种类型,但是某一个map内的所有值必须模式相同。

{“type”: “map”, “values”: “string”}

record

一个任意类型的命名字段集合。(相当于java中的自定义对象)

{“type”: “record”, “name”: “User”, “doc”:“A User Desc”,“fileds”:[{“name”:“nickname”,“type”: “string”},{“name”:“age”,“type”:“int”}]}

enum

一个命名的值集合(枚举)

{“type”:“enum”,“name”:“ActionStatus”,“doc”:“操作状态”,“symbols”:[“SUCCESS”,“FAILED”,“ACTING”]}

fixed

一组固定数量的8位无符号字节

{“type”:“fixed”,“name”:“Md5Hash”,“size”:16}

union

模式的并集。并集可用JSON数组表示,其中每个元素为一个模式。并集表示的数据必须与其内的某个模式相匹配

[“null”,“string”,{“type”:“map”,“values”:“string”}]

Avro数据文件

前面也提到过设计Avro的目的就是解决Hadoop中Writable类型缺乏语言的可移植性的不足。Avro数据文件主要是面向跨语言使用而设计的,我们可以通过Java写入文件,然后通过Python来读取文件,这都是没有问题的。数据文件的头部包含一个Avro模式和一个同步标识(sync marker),然后紧接着是一系列包含序列化Avro对象的数据块。数据块通过sync marker分隔。
这里有两个概念解释一下:

  • Avro模式 - 其实就相当于对象的定义,在这里我们规定字段的类型以及描述等信息。
  • sync marker - 对与该文件来讲是唯一的,存储在文件头部。

序列化和反序列化

上面也简单的了解了一下Avro,下面我们通过两段代码来尝试一下Avro的序列化和反序列化。

  • Avro模式定义,User.avsc

    {
    “type”: “record”,
    “name”: “User”,
    “doc”: “一个用户”,
    “fields”: [
    {“name”: “name”, “type”: “string”},
    {“name”: “age”, “type”: “int”}
    ]
    }

  • 序列化

    @Test
    public void write() throws IOException {
    Schema.Parser parser = new Schema.Parser();
    InputStream in = this.getClass().getResourceAsStream(“User.avsc”);
    Schema schema = parser.parse(in);
    GenericRecord record = new GenericData.Record(schema);
    record.put(“name”, “ganchaoyang”);
    record.put(“age”, 23);

    File file = new File("result.avro");
    DatumWriter<GenericRecord> writer = new GenericDatumWriter<GenericRecord>(schema);
    try(DataFileWriter<GenericRecord> dataFileWriter = new DataFileWriter<GenericRecord>(writer)) {dataFileWriter.create(schema, file);dataFileWriter.append(record);
    }
    

    }

  • 反序列化

    @Test
    public void read() throws IOException {
    File file = new File(“result.avro”);
    DatumReader reader = new GenericDatumReader<>();
    try (DataFileReader dataFileReader = new DataFileReader(file, reader)) {
    GenericRecord record;
    while (dataFileReader.hasNext()) {
    record = dataFileReader.next();
    Assert.assertEquals(“ganchaoyang”, record.get(“name”).toString());
    Assert.assertEquals(23, record.get(“age”));
    }
    }
    }

Hadoop之Avro介绍相关推荐

  1. 数据传输高性能中间键Avro介绍及基本应用

    Avro介绍 Avro是一个数据序列化系统,设计用于支持大批量数据交换的应用. 它的主要特点有:支持二进制序列化方式,可以便捷,快速地处理大量数据:动态语言友好,Avro提供的机制使动态语言可以方便地 ...

  2. 学习笔记Hadoop(八)—— Hadoop集群的安装与部署(5)—— Hadoop配置参数介绍、Hadoop集群启动与监控

    五.Hadoop配置参数介绍 Hadoop集群配置文件主要有: 它们的默认参数配置可以看: core-default.xml :https://hadoop.apache.org/docs/stabl ...

  3. 什么是HADOOP、产生背景、在大数据、云计算中的位置和关系、国内外HADOOP应用案例介绍、就业方向、生态圈以及各组成部分的简介(学习资料中的文档材料)

    1. HADOOP背景介绍 1. 1.1 什么是HADOOP 1.        HADOOP是apache旗下的一套开源软件平台 2.        HADOOP提供的功能:利用服务器集群,根据用户 ...

  4. Hadoop入门扫盲:hadoop发行版介绍与选择

    一.hadoop发行版介绍 目前Hadoop发行版非常多,有Intel发行版,华为发行版.Cloudera发行版(CDH).Hortonworks版本等,所有这些发行版均是基于Apache Hadoo ...

  5. Hadoop常用命令介绍

    下面分享一篇 常用的Hadoop命令介绍,希望对Hadoop初学者的朋友有所帮助~ Hadoop常用命令介绍

  6. Hadoop之MapReduce介绍整理

    Hadoop之MapReduce介绍整理 什么是批处理 ​ 在了解MapReduce之前,需要了解批处理的概念,批处理模式是一种最早进行大规模数据处理的模式.批处理主要操作大规模静态数据集,并在整体数 ...

  7. Hadoop:简单介绍

    什么是Hadoop: Hadoop是一种用Java编写的框架,用于在大型商品硬件集群上运行应用程序,并具有类似于Google File System和MapReduce的功能 . HDFS是高度容错的 ...

  8. Hadoop生态系统全面介绍

    Hadoop作为大数据的分布式计算框架,发展到今天已经建立起了很完善的生态,本文将一一介绍基于Hadoop生态的一系列框架和组件. Flume 简介: Flume 是一个分布式.高可用的服务,用于高效 ...

  9. Hadoop 底层原理介绍

    1 概述 Apache Hadoop是一个软件框架,可在具有数千个节点和PB级数据的大型集群上进行分布式处理. Hadoop主要包含四个项目:Hadoop Common.Hadoop分布式文件系统(H ...

最新文章

  1. Nginx负载均衡配置实例详解
  2. Dubbo2.6.5+Nacos注册中心(代替Zookeeper)
  3. Kfold交叉验证心得
  4. 如何用函数表示数(四)数的彻底消失
  5. 【活动推荐】北京泛娱乐行业技术沙龙——新技术助力内容产业破局之道
  6. 关于GAN的灵魂七问
  7. 美国将对所有墨西哥输美商品加征关税,为何日本股市反而大跌?
  8. php 在字符串中 找数字,php提取字符串中的数字
  9. java开发中常用到小方法
  10. python之父的名字-Python 常见双下划线关键字的用法
  11. C 和 CPP 混合代码cmath编译出错
  12. 测试人如何高效地设计自动化测试框架?
  13. 【数据结构_浙江大学MOOC】第六七八讲 图
  14. 重新审视SqlDataReader的使用
  15. 心电信号频谱图低通Matlab,心电信号处理分析.ppt
  16. Unity发布PC版本接入支付(威富通)
  17. Leetcode热门100之两数相加
  18. CorelDRAW入门教程
  19. XShell远程登录华为云服务器
  20. Aspose.Cells使用教程:使用 .NET 在 Linux 上创建或编辑 Excel 文件

热门文章

  1. ICIP 2009 Papers
  2. IE浏览器的临时文件(IE缓存)设置四种方式有什么不同
  3. 【转载】IEEE 802协议总览
  4. 按提款计划生成还本付息计划
  5. 液压推土车设计_氢源电动摩托车3D数模_可倾倒的垃圾推车_机场手推车行李推车_汽车悬挂系统solidworks设计_电动物料搬运车三维………………
  6. Re13:读论文 Gender and Racial Stereotype Detection in Legal Opinion Word Embeddings
  7. golang分布式任务调度
  8. 网红扎推背后的映客:78个内容审核人员把关3680万主播
  9. windows下多显示器鼠标切换设置
  10. 百度乡村振兴战略下传统村落文化旅游设计