数据湖(十六):Structured Streaming 实时写入 Iceberg
Structured Streaming 实时写入 Iceberg
目前 Spark 中 Structured Streaming 只支持实时向 Iceberg 中写入数据,不支持实时从 Iceberg 中读取数据,下面案例我们将使用 Structured Streaming 从 Kafka 中实时读取数据,然后将结果实时写入到 Iceberg 中。
一、创建 Kafka topic
启动 Kafka 集群,创建“kafka-iceberg-topic”
二、编写向 Kafka 生产数据代码
三、编写 Structured Streaming 读取 Kafka 数据实时写入 Iceberg
注意:以上代码执行时由于使用的 Spark 版本为 3.1.2,其依赖的 Hadoop 版本为 Hadoop3.2 版本,所以需要在本地 Window 中配置 Hadoop3.1.2 的环境变量以及将对应的 hadoop.dll 放入 window "C:\Windows\System32"路径下。
Structuerd Streaming 向 Iceberg 实时写入数据有以下几个注意点:
写 Iceberg 表写出数据支持两种模式:append 和 complete,append 是将每个微批数据行追加到表中。complete 是替换每个微批数据内容。
向 Iceberg 中写出数据时指定的 path 可以是 HDFS 路径,可以是 Iceberg 表名,如果是表名,要预先创建好 Iceberg 表。
写出参数 fanout-enabled 指的是如果 Iceberg 写出的表是分区表,在向表中写数据之前要求 Spark 每个分区的数据必须排序,但这样会带来数据延迟,为了避免这个延迟,可以设置“fanout-enabled”参数为 true,可以针对每个 Spark 分区打开一个文件,直到当前 task 批次数据写完,这个文件再关闭。
实时向 Iceberg 表中写数据时,建议 trigger 设置至少为 1 分钟提交一次,因为每次提交都会产生一个新的数据文件和元数据文件,这样可以减少一些小文件。为了进一步减少数据文件,建议定期合并“data files”(参照 1.9.6.9)和删除旧的快照(1.9.6.10)。
四、查看 Iceberg 中数据结果
启动向 Kafka 生产数据代码,启动向 Iceberg 中写入数据的 Structured Streaming 程序,执行以下代码来查看对应的 Iceberg 结果:
版权声明: 本文为 InfoQ 作者【Lansonli】的原创文章。
原文链接:【http://xie.infoq.cn/article/489ae3bf95e249728f76609b1】。文章转载请联系作者。
评论