当前位置: 首页 > news >正文

问题:Spark SQL 读不到 Flink 写入 Hudi 表的新数据,打开新 Session 才可见

《大数据平台架构与原型实现:数据中台建设实战》博主历时三年精心创作的《大数据平台架构与原型实现:数据中台建设实战》一书现已由知名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 表数据的更改。

解决方法


有两种方法可以“修正”这个问题:

  1. 显式地执行一次 refresh table 操作 ,但这个方法不态实用,除非我们在编写 SQL 时能确定应在何时 refresh。下图是一个测试:
    在这里插入图片描述

  2. 显式地设置 spark.sql.filesourceTableRelationCacheSize=0,禁止 Spark 缓存相关的元数据,这个是持续生效的,但需要提醒的是该配置项为静态配置,不能在 SQL 中用 set 语句设置,只能在启动 Spark SQL Shell 时通过 --conf 参数配置,就像这样:

    spark-sql --jars /usr/lib/hudi/hudi-spark-bundle.jar \--conf "spark.serializer=org.apache.spark.serializer.KryoSerializer" \--conf "spark.sql.catalog.spark_catalog=org.apache.spark.sqlatalog" \--conf "spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension" \--conf "spark.sql.filesourceTableRelationCacheSize=0"
    

    下图是一个测试:
    在这里插入图片描述

http://www.lryc.cn/news/305832.html

相关文章:

  • 数学建模资料分享
  • 应用配置管理
  • This dependency was not found解决方法
  • 基于SpringBoot的停车场管理系统
  • SQL库操作
  • 物麒平台根据入耳出耳状态使能或禁止触摸按键实现方法
  • CAS5.3使用JPA实现动态注册服务
  • unity ui界面优化
  • mysql-MVCC
  • ​Sqli-labs靶场第9关详解[Sqli-labs-less-9]
  • 第3.5章:StarRocks数据导入——Broker Load
  • Linux之ACL权限chmod命令
  • HBuilderX的特点
  • CrossOver虚拟机软件2024有哪些功能?最新版本支持哪些游戏?
  • Android LinearLayout 如何让子元素靠下居中对齐 center bottom
  • 物体检测-系列教程16:YOLOV5 源码解析6(马赛克数据增强函数load_mosaic)
  • 星河做市基金会全球DAO社区启动,为数字货币市场注入新活力
  • QT Widget自定义菜单
  • UnityWebGL 设置全屏
  • 100224. 分割数组
  • WSL2配置Linux、Docker、VS Code、zsh、oh my zsh(附Docker开机自启设置)
  • 深度学习基础(四)医疗影像分析实战
  • ChatGPT调教指南 | 咒语指南 | Prompts提示词教程(一)
  • LeetCode | 两数相加 C语言
  • 【Spring MVC】处理器映射器:AbstractHandlerMethodMapping源码分析
  • 网络编程知识整理
  • 【小白友好】leetcode 移动零
  • 迭代、递归、尾递归实现斐波那契数列的第n项
  • vulnhub靶场之driftingblues-1
  • NGINX服务器配置实现加密的WebSocket连接WSS协议