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

news2024/12/23 23:36:50
《大数据平台架构与原型实现:数据中台建设实战》博主历时三年精心创作的《大数据平台架构与原型实现:数据中台建设实战》一书现已由知名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.coloradmin.cn/o/1461911.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GoLand 2023:为Go开发者打造的智能IDE mac/win激活版

JetBrains GoLand 2023是一款专为Go语言开发者打造的集成开发环境(IDE),它提供了强大的代码编辑、调试、测试和重构功能,帮助开发者更高效地开发Go应用程序。 GoLand 2023 软件获取 JetBrains GoLand 2023继承了JetBrains在开发工具领域的丰富经验&…

[论文阅读] 空间熵图像增强算法(Spatial Entropybased Contrast Enhancement in DCT)

[论文阅读] 空间熵图像增强算法(Spatial Entropybased Contrast Enhancement in DCT) 最近看到了一篇介绍传统图像增强算法的文章:基于空间熵的对比度增强算法 - 知乎 (zhihu.com),从里面看到效果还不错,如下所示,因而详细看了下…

【8】证书公钥替换

0x01 问题描述 存在一个前置系统,数据包有登录信息。登录需要填入用户名,证书上传,私钥。如图: 提供数据包如下: POST /api/certLogin HTTP/1.1 Host: 192.168.11.153 Connection: keep-alive Content-Length: 934…

LLM之RAG实战(二十七)| 如何评估RAG系统

有没有想过今天的一些应用程序是如何看起来几乎神奇地智能的?这种魔力很大一部分来自于一种叫做RAG和LLM的东西。把RAG(Retrieval Augmented Generation)想象成人工智能世界里聪明的书呆子,它会挖掘大量信息,准确地找到…

vue项目设置的端口号运行后会自动加一问题解决

vue项目设置的端口号运行后会自动加一问题解决 主要原因是之前运行项目后没有完全的关闭服务,导致再次运行项目端口号被占用,自动加一! 问题解决 打开任务管理器,在进程中找到node相关进程,右键结束任务

【Java EE初阶二十一】http的简单理解(二)

2. 深入学习http 2.5 关于referer Referer 描述了当前页面是从哪个页面跳转来的,如果是直接在地址栏输入 url(或者点击收藏夹中的按钮) 都是没有 Referer。如下图所示: HTTP 最大的问题在于"明文传输”,明文传输就容易被第三方获取并篡改. …

React之拖动组件的设计(一)

春节终结束了,忙得我头疼。终于有时间弄自己的东西了。今天来写一个关于拖动的实例讲解。先看效果: 这是一个简单的组件设计,如果用原生的js设计就很简单,但在React中有些事件必须要多考虑一些。这是一个系列的文章,…

【Vuforia+Unity】AR04-地面、桌面平面识别功能

不论你是否曾有过相关经验,只要跟随本文的步骤,你就可以成功地创建你自己的AR应用。 官方教程Ground Plane in Unity | Vuforia Library 这个功能很棒,但是要求也很不友好,只能支持部分移动设备,具体清单如下&#xf…

2024牛客寒假算法基础集训营5 -- EF soyorin的数组操作

题目大意: 思路解析: 我们可以发现偶数情况下,我们可以无限做 k n的操作,这样一定会让数组变为非降序数组。 但是奇数情况下,最后一个数没有办法发生变化,所以我们只能统计怎样在保证i--n为非降序情况下最…

ELK Stack 日志平台搭建

前言 最近在折腾 ELK 日志平台,它是 Elastic 公司推出的一整套日志收集、分析和展示的解决方案。 专门实操了一波,这玩意看起来简单,但是里面的流程步骤还是很多的,而且遇到了很多坑。在此记录和总结下。 本文亮点:…

洛谷 P1028 [NOIP2001 普及组] 数的计算

说明(6) 求出后五个加本身得到总方案 参考代码and代码解读

redis复习笔记06(小滴课堂)

分布式锁核心知识介绍和注意事项 基于Redis实现分布式锁的几种坑 综合伪代码: 运行:

压缩感知常用的测量矩阵

测量矩阵的基本概念 在压缩感知(Compressed Sensing,CS)理论中,测量矩阵(也称为采样矩阵)是实现信号压缩采样的关键工具。它是一个通常为非方阵的矩阵,用于将信号从高维空间映射到低维空间&…

电商+支付双系统项目------实现电商系统中分类模块的开发!

本篇文章主要介绍一下这个项目中电商系统的分类模块开发。电商系统有很多模块,除了分类模块,还有用户模块,购物车模块,订单模块等等。上一篇文章已经讲了用户模块,这篇文章我们讲讲项目中的分类模块。 有的人可能会很…

解决docker中运行的jar包连不上前端程序

目录 检查端口映射 查看容器的 IP 地址 检查容器网络设置 防火墙和网络策略 前端程序配置 跨域资源共享 (CORS) 日志查看 连接问题通常涉及到网络配置和端口映射。确保你在 Docker 中运行的 JAR 包可以被前端程序访问,可以采取以下步骤来解决问题&#xff1a…

职业技能鉴定服务中心前端静态页面(官网+证书查询)

有个朋友想做职业技能培训,会发证书,证书可以在自己网站可查。想做一个这样的网站,而且要特别土,一眼看上去像xxx官方网站,像jsp .net技术开发的网站。用htmlcssjquery还原了这样子一个前端页面,这里分享给…

操作系统导论-课后作业-ch19

1. 本书在第6章中有过介绍,gettimeofday函数最多精确到us,并且大致精确(并不完全精确),需要多迭代几次减少误差,循环次数太多也会导致结束时间小于开始时间(即回滚)的现象&#xff…

LInux-信号1

文章目录 前言一、信号是什么?二、学习步骤使用kill -l命令查看信号列表可以看到有那么多信号,那么进程是如何识别这么多信号的呢? 使用kill命令终止进程信号的捕捉kill函数raise函数abort函数 Core dump如何查看自己的核心转储功能是否被打开…

【云原生】持续集成持续部署

本文主要总结CI/CD的流程,不会详细介绍每个知识点。 啥是集成?啥是部署? 集成,就是把应用程序、相关环境、配置全局打包放在一个容器中的操作。部署就不解释了。 CI/CD 如果是自己手动部署的话,流程应该是这样的&am…

Open CASCADE学习|计算全局属性

对于一个系统全局属性有: 质量(mass) 质心(mass center) 惯性张量(matrix of inertia) 关于一个轴的矩(moment about an axis) 关于一个轴的惯性半径(radius of gyration about an axis) 惯性的主属性,比如主轴(principal axis),主矩(pr…