淘宝网站的建设目标是,网站建设技术支持包括哪些,lol有哪些网站是做陪玩的,文化公司网页设计博主历时三年精心创作的《大数据平台架构与原型实现#xff1a;数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行#xff0c;点击《重磅推荐#xff1a;建大数据平台太难了#xff01;给我发个工程原型吧#xff01;》了解图书详情#xff0c;…博主历时三年精心创作的《大数据平台架构与原型实现数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行点击《重磅推荐建大数据平台太难了给我发个工程原型吧》了解图书详情京东购书链接https://item.jd.com/12677623.html扫描左侧二维码进入京东手机购书页面。
问题描述 使用 Flink 向 Hudi 表中写入数据使用 Spark SQL 的 Shell 查询 Hudi 表使用的是 Hudi HMS Catalog 统一管理和同步 Hudi 表的元数据结果在 Spark 中只能查询到打开 Shell 之前表中的数据之后通过 Flink 写入的数据不可见但重新打开一个新的 Spark SQL Shell就可以看到了。
原因分析 这个问题并不是一个 Bug 在 Hudi 的 Issues 列表中有反馈和讨论https://github.com/apache/hudi/issues/7452简单说就是Spark SQL 的 Shell 所启动的 Session 会 cache 一些表和文件的元数据在只通过 Spark SQL 这一个“渠道”操作 Hudi 表时是不会有问题的但这里 Flink 对 Hudi 表的操作完全不在 Spark SQL 的“感知”范围内Spark SQL 会继续使用自己 Cache 中已经过期的元数据数据所以没有及时反映出 Flink 对 Hudi 表数据的更改。
解决方法 有两种方法可以“修正”这个问题 显式地执行一次 refresh table 操作 但这个方法不态实用除非我们在编写 SQL 时能确定应在何时 refresh。下图是一个测试 显式地设置 spark.sql.filesourceTableRelationCacheSize0禁止 Spark 缓存相关的元数据这个是持续生效的但需要提醒的是该配置项为静态配置不能在 SQL 中用 set 语句设置只能在启动 Spark SQL Shell 时通过 --conf 参数配置就像这样 spark-sql --jars /usr/lib/hudi/hudi-spark-bundle.jar \--conf spark.serializerorg.apache.spark.serializer.KryoSerializer \--conf spark.sql.catalog.spark_catalogorg.apache.spark.sqlatalog \--conf spark.sql.extensionsorg.apache.spark.sql.hudi.HoodieSparkSessionExtension \--conf spark.sql.filesourceTableRelationCacheSize0下图是一个测试