千家信息网

Apache Avro数据的示例分析

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要介绍Apache Avro数据的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!随着互联网高速的发展,云计算、大数据、人工智能AI、物联网等前沿技术已然成为当
千家信息网最后更新 2026年10月31日Apache Avro数据的示例分析

这篇文章主要介绍Apache Avro数据的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

随着互联网高速的发展,云计算、大数据、人工智能AI、物联网等前沿技术已然成为当今时代主流的高新技术,诸如电商网站、人脸识别、无人驾驶、智能家居、智慧城市等等,不仅方面方便了人们的衣食住行,背后更是时时刻刻有大量的数据在经过各种各样的系统平台的采集、清晰、分析,而保证数据的低时延、高吞吐、安全性就显得尤为重要,Apache Avro本身通过Schema的方式序列化后进行二进制传输,一方面保证了数据的高速传输,另一方面保证了数据安全性,avro当前在各个行业的应用越来越广泛,如何对avro数据进行处理解析应用就格外重要,本文将演示如果序列化生成avro数据,并使用FlinkSQL进行解析。

本文是avro解析的demo,当前FlinkSQL仅适用于简单的avro数据解析,复杂嵌套avro数据暂时不支持。

场景介绍

本文主要介绍以下三个重点内容:

  • 如何序列化生成Avro数据

  • 如何反序列化解析Avro数据

  • 如何使用FlinkSQL解析Avro数据

前提条件

  • 了解avro是什么,可参考apache avro官网快速入门指南

  • 了解avro应用场景

操作步骤

1、新建avro maven工程项目,配置pom依赖

pom文件内容如下:

    4.0.0    com.huawei.bigdata    avrodemo    1.0-SNAPSHOT                        org.apache.avro            avro            1.8.1                            junit            junit            4.12                                                    org.apache.avro                avro-maven-plugin                1.8.1                                                            generate-sources                                                    schema                                                                            ${project.basedir}/src/main/avro/                            ${project.basedir}/src/main/java/                                                                                                    org.apache.maven.plugins                maven-compiler-plugin                                    1.6                    1.6                                        

注意:以上pom文件配置了自动生成类的路径,即project.basedir/src/main/avro/和{project.basedir}/src/main/avro/和project.basedir/src/main/avro/和{project.basedir}/src/main/java/,这样配置之后,在执行mvn命令的时候,这个插件就会自动将此目录下的avsc schema生成类文件,并放到后者这个目录下。如果没有生成avro目录,手动创建一下即可。

2、定义schema

使用JSON为Avro定义schema。schema由基本类型(null,boolean, int, long, float, double, bytes 和string)和复杂类型(record, enum, array, map, union, 和fixed)组成。例如,以下定义一个user的schema,在main目录下创建一个avro目录,然后在avro目录下新建文件 user.avsc :

{"namespace": "lancoo.ecbdc.pre", "type": "record", "name": "User", "fields": [     {"name": "name", "type": "string"},     {"name": "favorite_number",  "type": ["int", "null"]},     {"name": "favorite_color", "type": ["string", "null"]} ]}

3、编译schema

点击maven projects项目的compile进行编译,会自动在创建namespace路径和User类代码

4、序列化

创建TestUser类,用于序列化生成数据

User user1 = new User();user1.setName("Alyssa");user1.setFavoriteNumber(256);// Leave favorite col or null// Alternate constructorUser user2 = new User("Ben", 7, "red");// Construct via builderUser user3 = User.newBuilder()        .setName("Charlie")        .setFavoriteColor("blue")        .setFavoriteNumber(null)        .build();// Serialize user1, user2 and user3 to diskDatumWriter userDatumWriter = new SpecificDatumWriter(User.class);DataFileWriter dataFileWriter = new DataFileWriter(userDatumWriter);dataFileWriter.create(user1.getSchema(), new File("user_generic.avro"));dataFileWriter.append(user1);dataFileWriter.append(user2);dataFileWriter.append(user3);dataFileWriter.close();

执行序列化程序后,会在项目的同级目录下生成avro数据

user_generic.avro内容如下:

Objavro.schema�{"type":"record","name":"User","namespace":"lancoo.ecbdc.pre","fields":[{"name":"name","type":"string"},{"name":"favorite_number","type":["int","null"]},{"name":"favorite_color","type":["string","null"]}]}

至此avro数据已经生成。

5、反序列化

通过反序列化代码解析avro数据

// Deserialize Users from diskDatumReader userDatumReader = new SpecificDatumReader(User.class);DataFileReader dataFileReader = new DataFileReader(new File("user_generic.avro"), userDatumReader);User user = null;while (dataFileReader.hasNext()) {    // Reuse user object by passing it to next(). This saves us from    // allocating and garbage collecting many objects for files with    // many items.    user = dataFileReader.next(user);    System.out.println(user);}

执行反序列化代码解析user_generic.avro

avro数据解析成功。

6、将user_generic.avro上传至hdfs路径

hdfs dfs -mkdir -p /tmp/lztest/hdfs dfs -put user_generic.avro /tmp/lztest/

7、配置flinkserver

  • 准备avro jar包

将flink-sql-avro-*.jar、flink-sql-avro-confluent-registry-*.jar放入flinkserver lib,将下面的命令在所有flinkserver节点执行

cp /opt/huawei/Bigdata/FusionInsight_Flink_8.1.2/install/FusionInsight-Flink-1.12.2/flink/opt/flink-sql-avro*.jar /opt/huawei/Bigdata/FusionInsight_Flink_8.1.3/install/FusionInsight-Flink-1.12.2/flink/libchmod 500 flink-sql-avro*.jarchown omm:wheel flink-sql-avro*.jar

  • 同时重启FlinkServer实例,重启完成后查看avro包是否被上传

    hdfs dfs -ls /FusionInsight_FlinkServer/8.1.2-312005/lib

8、编写FlinkSQL

CREATE TABLE testHdfs(  name String,  favorite_number int,  favorite_color String) WITH(  'connector' = 'filesystem',  'path' = 'hdfs:///tmp/lztest/user_generic.avro',  'format' = 'avro');CREATE TABLE KafkaTable (  name String,  favorite_number int,  favorite_color String) WITH (  'connector' = 'kafka',  'topic' = 'testavro',  'properties.bootstrap.servers' = '96.10.2.1:21005',  'properties.group.id' = 'testGroup',  'scan.startup.mode' = 'latest-offset',  'format' = 'avro');insert into  KafkaTableselect  *from  testHdfs;

保存提交任务

9、查看对应topic中是否有数据

FlinkSQL解析avro数据成功。

以上是"Apache Avro数据的示例分析"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

数据 序列 生成 目录 内容 文件 配置 分析 代码 路径 项目 保证 应用 示例 复杂 重要 安全 成功 命令 场景 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网是第几次科技革命的成果 关于新基建和互联网科技 上海喔噻互联网科技 融势互联网科技 上海电发互联网科技有限公司 互联网科技公司需要的职位 新华互联网科技2019 中国科技互联网公司收入 温州喔噻互联网科技有限公司 茂名市互联网科技产业园 全球顶尖互联网科技公司 互联网科技商业 互联网科技的全部知识 互联网科技大赛获奖感言 怎样加入科技互联网 风投北京互联网科技 35岁以上互联网科技行业 米泉互联网科技专业怎么样 山东蛋芒互联网科技有限公司 安徽九吞吴互联网科技有限公司 重庆互联网络科技 狮子座互联网科技 碳银互联网科技 中国最先进互联网科技公司 互联网大会黑科技排名 青岛科技大学互联网大赛研究生 滨湖区互联网智能科技产品有哪些 神州科技互联网有限公司 玉溪新华互联网科技怎么选 华人运通互联网科技公司
0