【Flink 实战系列】Flink SQL 实时同步 Kafka 数据到 Hudi(parquet + snappy)并且自动同步数据到 Hive

本文介绍了如何使用 Flink SQL 实时从 Kafka 同步数据到 Hudi(parquet + snappy),并自动同步到 Hive。通过 Flink 1.15.x 和 Hudi 0.12.0 版本,展示了创建 Kafka source、Hudi sink 的 DDL,以及 INSERT DML 语句。文章还详细讲解了 Hive 表的创建、数据加载和查询,以及遇到的问题及解决方案,包括 Hive 输入格式错误和依赖 jar 包的添加。
摘要由CSDN通过智能技术生成

Flink SQL 实时同步 Kafka 数据到 Hudi(parquet + snappy)并且自动同步数据到 Hive

821816dfbab2e543e473fa2413cfd7fe

今天这篇文章主要来介绍一下 Flink 流式写入 Hudi,并把数据加载到 Hive 表里做查询的两种方式,为了方便演示,下文采用 sql client 的方式提交任务,不写一行代码,纯 SQL 的方式来完成。

版本信息

Flink 1.15.1
Hadoop 2.9.0
Hudi 0.12.0
Kafka 2.4.1

需要注意的是 Flink 1.15.x 版本对应的 Hudi 必须使用 0.12.0 及以上版本,因为 Hudi 0.12.0 版本才开始支持 Flink 1.15.0 版本。

jar 包依赖

Apache Flink 是一个流处理框架,支持实时数据处理和批处理。Flink 可以轻松地与 Apache Kafka 集成,实现从 Kafka 中读取数据并将其写入 HDFS。 下面是实现实时同步 Kafka 数据到 HDFS 的基本步骤: 1. 在 Flink 中引入 Kafka 和 HDFS 的依赖。 2. 创建一个 Flink StreamExecutionEnvironment 对象,并设置相关参数。 3. 创建一个 Kafka 数据源,并从 Kafka 中读取数据。 4. 对读取的数据进行转换和处理。 5. 将处理后的数据写入 HDFS 中。 以下是一个基本的示例代码: ```java import org.apache.flink.api.common.functions.MapFunction; import org.apache.flink.api.java.utils.ParameterTool; import org.apache.flink.core.fs.FileSystem.WriteMode; import org.apache.flink.streaming.api.datastream.DataStream; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer09; import org.apache.flink.streaming.connectors.kafka.FlinkKafkaProducer09; public class KafkaToHDFS { public static void main(String[] args) throws Exception { // 从命令行参数中读取参数 final ParameterTool params = ParameterTool.fromArgs(args); // 创建一个 Flink StreamExecutionEnvironment 对象,并设置相关参数 final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); env.setParallelism(params.getInt("parallelism", 1)); // 设置 Kafka 数据源 Properties props = new Properties(); props.setProperty("bootstrap.servers", "localhost:9092"); props.setProperty("group.id", "test"); FlinkKafkaConsumer09<String> consumer = new FlinkKafkaConsumer09<>( params.getRequired("topic"), new SimpleStringSchema(), props); // 从 Kafka 中读取数据 DataStream<String> stream = env.addSource(consumer); // 对读取的数据进行转换和处理 DataStream<String> transformed = stream.map(new MapFunction<String, String>() { @Override public String map(String value) throws Exception { // 进行转换和处理 return value.toUpperCase(); } }); // 将处理后的数据写入 HDFS 中 transformed.writeAsText(params.getRequired("output"), WriteMode.OVERWRITE); // 执行任务 env.execute("KafkaToHDFS"); } } ``` 在执行上述代码之前,需要先将 Flink 的依赖添加到项目中,并修改示例代码中的相关配置参数,如 Kafka 的连接地址、topic 名称和 HDFS 的输出路径等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JasonLee实时计算

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值