当前位置: 代码网 > 服务器>服务器>Linux > 聊聊怎么解析Apache Avro数据(示例讲解)

聊聊怎么解析Apache Avro数据(示例讲解)

2025年03月30日 Linux 我要评论
怎么解析apache avro数据?本篇文章给大家介绍一下序列化生成avro数据、反序列化解析avro数据、使用flinksql解析avro数据的方法,希望对大家有所帮助!随着互联网高速的发展,云计算

怎么解析apache avro数据?本篇文章给大家介绍一下序列化生成avro数据、反序列化解析avro数据、使用flinksql解析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依赖

1.png

pom文件内容如下:

<?xml  version="1.0" encoding="utf-8"?><project>
    <modelversion>4.0.0</modelversion>

    <groupid>com.huawei.bigdata</groupid>
    <artifactid>avrodemo</artifactid>
    <version>1.0-snapshot</version>
    <dependencies>
        <dependency>
            <groupid>org.apache.avro</groupid>
            <artifactid>avro</artifactid>
            <version>1.8.1</version>
        </dependency>
        <dependency>
            <groupid>junit</groupid>
            <artifactid>junit</artifactid>
            <version>4.12</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupid>org.apache.avro</groupid>
                <artifactid>avro-maven-plugin</artifactid>
                <version>1.8.1</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.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
        </plugins>
    </build></project>
登录后复制

注意:以上pom文件配置了自动生成类的路径,即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"]}
 ]
}
登录后复制

2.png

3、编译schema

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

3.png

4、序列化

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

user user1 = new user();
user1.setname("alyssa");
user1.setfavoritenumber(256);
// leave favorite col or null

// alternate constructor
user user2 = new user("ben", 7, "red");

// construct via builder
user user3 = user.newbuilder()
        .setname("charlie")
        .setfavoritecolor("blue")
        .setfavoritenumber(null)
        .build();

// serialize user1, user2 and user3 to disk
datumwriter<user> userdatumwriter = new specificdatumwriter<user>(user.class);
datafilewriter<user> datafilewriter = new datafilewriter<user>(userdatumwriter);
datafilewriter.create(user1.getschema(), new file("user_generic.avro"));
datafilewriter.append(user1);
datafilewriter.append(user2);
datafilewriter.append(user3);
datafilewriter.close();</user></user></user></user>
登录后复制

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

4.png

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 disk
datumreader<user> userdatumreader = new specificdatumreader<user>(user.class);
datafilereader<user> datafilereader = new datafilereader<user>(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></user></user></user>
登录后复制

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

5.png

avro数据解析成功。

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

hdfs dfs -mkdir -p /tmp/lztest/

hdfs dfs -put user_generic.avro /tmp/lztest/
登录后复制

6.png

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/lib

chmod 500 flink-sql-avro*.jar

chown omm:wheel flink-sql-avro*.jar
登录后复制

7.png

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

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

8.png

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
  kafkatable
select
  *
from
  testhdfs;
登录后复制

9.png

保存提交任务

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

10.png

flinksql解析avro数据成功。

【推荐:apache使用教程】

以上就是聊聊怎么解析apache avro数据(示例讲解)的详细内容,更多请关注代码网其它相关文章!

(0)

相关文章:

  • apache是什么语言写的

    apache是什么语言写的

    apache http 服务器是用 c 语言编写的,因为它提供了高效、跨平台支持、可扩展性、模块化以及安全性。apache是什么语言写的?apache http... [阅读全文]
  • 一文详解apache druid

    前言:什么是apache druid?它是一个集时间序列数据库、数据仓库和全文检索系统特点于一体的分析性数据平台。本文会为大家简单了解一下druid的特性、使用场景、技术特点和架构…

    2025年03月30日 服务器
  • apache是干什么用的

    apache是干什么用的

    apache是一款开放源码的网络服务器软件,主要用途包括托管网站、提供web服务和应用程序。apache的优势包括跨平台支持、可扩展性、稳定性、安全性以及免费开... [阅读全文]
  • linux下修改apache服务器的默认路径

    导语:apache(音译为阿帕奇)是世界使用排名第一的web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的web服务器端软件之一…

    2025年03月30日 服务器
  • apache是什么语言

    apache是什么语言

    apache不是一种编程语言,而是一款开源的web服务器软件,使用c和c++语言编写,用于处理http请求和提供web内容。apache是什么语言?apache... [阅读全文]
  • apache启动后无法访问网页怎么办

    前言:apache启动后访问不了。排查发现端口没有被占用,考虑防火墙问题。(学习视频分享:编程入门)解决方法:首先我们需要确保远程的linux系统已经安装好,我们使用xshell远…

    2025年03月30日 服务器

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com