摘要:本文将演示如果序列化生成avro数据,并使用FlinkSQL进行解析 。
Avro官方文档所写,http://avro.apache.org/docs/current/index.html.
Avro简介avro是一个数据序列化系统
提供了:
- 丰富的数据结构
- 紧凑的,快速的,二进制的数据格式
- 一种文件格式,用于存储持久化数据
- 远程过程调用系统(RPC)
- 和动态语言的简单交互 。并不需要为数据文件读写产生代码,也不需要使用或实现RPC协议 。代码生成是一种优化方式,但是只对于静态语言有意义 。
本文是avro解析的demo,当前FlinkSQL仅适用于简单的avro数据解析,复杂嵌套avro数据暂时不支持 。
场景介绍本文主要介绍以下三个重点内容:
- 如何序列化生成Avro数据
- 如何反序列化解析Avro数据
- 如何使用FlinkSQL解析Avro数据
- 了解avro是什么,可参考apache avro官网快速入门指南
- 了解avro应用场景

文章插图
pom文件内容如下:
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

文章插图
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"]}]}
5、反序列化
通过反序列化代码解析avro数据
// Deserialize Users from diskDatumReader

文章插图
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 intoKafkaTableselect*fromtestHdfs;

文章插图
保存提交任务
9、查看对应topic中是否有数据

文章插图
FlinkSQL解析avro数据成功 。
到此这篇关于一文解析Apache Avro数据的文章就介绍到这了,更多相关Apache Avro数据内容请搜索考高分网以前的文章或继续浏览下面的相关文章希望大家以后多多支持考高分网!
- 春季老年人吃什么养肝?土豆、米饭换着吃
- 三八妇女节节日祝福分享 三八妇女节节日语录
- 老人谨慎!选好你的“第三只脚”
- 校方进行了深刻的反思 青岛一大学生坠亡校方整改校规
- 脸皮厚的人长寿!有这特征的老人最长寿
- 长寿秘诀:记住这10大妙招 100%增寿
- 春季老年人心血管病高发 3条保命要诀
- 眼睛花不花要看四十八 老年人怎样延缓老花眼
- 香槟然能防治老年痴呆症? 一天三杯它人到90不痴呆
- 老人手抖的原因 为什么老人手会抖
