记一次Spark cache table导致的数据问题以及思考

目前在做 Spark 升级(3.1.1升级到3.5.0)的时候,遇到了cache table导致的数据重复问题,这种情况一般来说是很少见的,因为一般很少用cache table语句。

当然该问题已经在Spark3.5.1已经解决了,可以查看对应的 SPARK-46995SPARK-45592

从以上的分析知道:是在做join的一方(包含了AQEshuffleRead-coalesced) 影响了join的另一方,导致EnsureRequirements规则在做执行前检查的时候,会把join的另一个方的shuffle 数据调整为 包含了AQEshuffleRead-coalesced)的一方:

复制代码
                      Scan
                       |
                   Shuffle(200)
                       |
  Scan           AQEShuffleRead(10)
   |                   |
Shuffle(10)   InMemoryTableScanExec
    \            /
         Join    

这会导致shuffle后的数据进行了错位(因为之前是shuffle(200),现在变成了shuffle(10)),具体原因笔者还是没有分析清楚,但是其中涉及到的点跟规则EnsureRequirements 以及 CoalesceShufflePartitions 有关,
EnsureRequirements 会做一些执行前的判断,主要是做任务shuffle的协调,
CoalesceShufflePartitions 中 collectCoalesceGroups 会收集 QueryStageExec ,如果是 join 的话,则会join的子节点会收集到一个组里去,这样就能看到 join中会有 AQEShuffleRead coalesced 成对出现

相关推荐
AAA小肥杨4 小时前
基于k8s的Python的分布式深度学习训练平台搭建简单实践
人工智能·分布式·python·ai·kubernetes·gpu
爬山算法7 小时前
Redis(73)如何处理Redis分布式锁的死锁问题?
数据库·redis·分布式
IT小哥哥呀8 小时前
电池制造行业数字化实施
大数据·制造·智能制造·数字化·mom·电池·信息化
Xi xi xi8 小时前
苏州唯理科技近期也正式发布了国内首款神经腕带产品
大数据·人工智能·经验分享·科技
yumgpkpm8 小时前
华为鲲鹏 Aarch64 环境下多 Oracle 、mysql数据库汇聚到Cloudera CDP7.3操作指南
大数据·数据库·mysql·华为·oracle·kafka·cloudera
祈祷苍天赐我java之术9 小时前
Redis 数据类型与使用场景
java·开发语言·前端·redis·分布式·spring·bootstrap
UMI赋能企业9 小时前
制造业流程自动化提升生产力的全面分析
大数据·人工智能
TDengine (老段)10 小时前
TDengine 数学函数 FLOOR 用户手册
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
猫林老师11 小时前
HarmonyOS线程模型与性能优化实战
数据库·分布式·harmonyos
派可数据BI可视化12 小时前
商业智能BI 浅谈数据孤岛和数据分析的发展
大数据·数据库·数据仓库·信息可视化·数据挖掘·数据分析