3-sparksql-complex-process

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

复杂流程的spark sql 的执行计划的处理

以StructuredStream生成的可执行计划executedPlan为例,分析具体执行的流程。

  • 基本功能描述:
      1. socket流处理时候,带状态的统计单词的个数,下面是一批数据生成的执行计划
// 物理计划
sparkPlan:HashAggregateExec
 + child: StateStoreSaveExec
  + child:HashAggregateExec
   + child :StateStoreRestoreExec
    + child : HashAggregateExec
      + child : HashAggregateExec
         +child:SerializeFromObjectExec 
          +child:MapPartitionsExec
             +child:DeserializeToObjectExec
               +child:LocalTableScanExec
                   +rows:ListBuffer


//可执行计划结构
executedPlan:WholeStageCodegenExec
 +child:HashAggregateExec
  +child:InputAdapter
   +child:StateStoreSaveExec
    +child:WholeStageCodegenExec
     +child:HashAggregateExec
      +child:InputAdapter
        +child:StateStoreRestoreExec
          +child:WholeStageCodegenExec
            +child:HashAggregateExec
             +child:InputAdapter    
              +child:ShuffleExchange
               +child:WholeStageCodegenExec
                +child:HashAggregateExec
                  +child:SerializeFromObjectExec
                   +child:InputAdapter
                     +child:MapPartitionsExec
                       +child:DeserializeToObjectExec
                         +child:LocalTableScanExec
                            +rows:ListBuffer

//可执行计划全局代码生成RDD结构
byteArrayRdd:MapPartitionsRDD
 +  prev :  MapPartitionsRDD  
   +  prev : StateStoreRDD 
     +  dataRDD : MapPartitionsRDD
       +  prev :  StateStoreRDD
         +  dataRDD : MapPartitionsRDD
           + prev : ShuffledRowRDD
             +  dependency: ShufflDependency
               + _rdd: MapPartitionsRDD
                 + prev :  MapPartitionsRDD  
                   + prev :  MapPartitionsRDD  
                     + prev :  MapPartitionsRDD  
                      + prev :  MapPartitionsRDD  
                       + prev : ParalleCollectionRDD
                        + data                    

调用总结

  1. getByteArrayRdd ==》 SparkSql DataSet处理入口action函数如:collectFromPlan,首先都会执行executedPlan:WholeStageCodegenExec的getByteArrayRdd,如executeCollect函数 - 最终返回一个压缩有的RDD[Array[Byte]]
  2. doExecute ==》 WholeStageCodegenExec#doExecute开始计划执行 - doCodeGen 逻辑执行代码生成,也就是while内的代码块
    • 由当前WholeStageCodegenExec的最后一个计划负责生成while语句块
      • 可以是 InputAdapter 也可以是其他计划的doProduce方法生成
    • 递归调用父类consume方法生成while内的执行逻辑 - inputRDDs 获取输入rdd
    • 如果是InputAdapter会调用子类的doExecute
      • 如果InputAdapter子类是WholeStageCodegenExec 则重复 [2]
  3. inputRDDs.mapPartitionsWithIndex,遍历每个partition
    • 编译并初始化动态生成的类
    • 将partition的iterator转换为动态类的iterator
  4. 将 RDD[InternalRow] 编码并压缩为 RDD[Array[Byte]]
  5. 执行 RDD
【信息科学与工程学】计算机科学与自动化——第三百零四篇 高性能系统开发指南01 高并发:限流、熔断、降级高性能:红包拆分、多级缓存、大Key/热Key拆分、Pipeline、线程池、RocketMQ零丢失、幂等、分布式锁、集群缩容、分批入库海量数据处理:日志分表分片、跨表查询、冷热分层、大数据引擎服务器选型系统安全:网关安全、服务器安全、云存储安全、风控、监控、测试数据一致性:缓存与数据库一致性、大厂方案、蓝绿回滚、流量一致性、流程一致性项目与团队管理:流程问题、管理问题(风险、成本、人员、文档、培训)稳定性建设:上线三板斧、线上五步闭环、混沌工程、容量规划。 阅读详情

相关推荐

【Android性能优化】Android内存度量体系:PSS、RSS、USS 与 dumpsys meminfo 的源码级解析

本文基于 AOSP Android 16 源码,以 `Debug.MemoryInfo` 为切入点,系统拆解 Android 内存度量的完整口径体系。文中讲清 dalvik / native / other 三大分类的来源,逐条解析 PSS、SwappablePss、RSS、Private Dirty、Shared Dirty、Private Clean、Shared Clean、SwappedOut、SwappedOutPss 这九个维度的含义与差异,并深入 `other` 分类下 `.so`。

weixin_44081096的博客 513

w232基于springboot高校新生宿舍预选系统的设计与实现

内容主要介绍高校新生宿舍预选系统,基于Springboot、Mysql、B/S结构,功能包括学生管理、宿舍预选分配等。还有作者简介和联系方式等。摘要应概括核心。摘要:本文介绍基于Springboot、Mysql和B/S结构的高校新生宿舍预选系统,实现学生管理、专业班级管理、预选与分配信息、宿舍信息及新闻资讯等功能,旨在提升宿舍分配效率与信息化管理水平。

卓怡学长的博客 152

软考架构师90天冲刺|DAY34·API网关设计

<think>我们根据要求生成一个不超过150字的文章摘要,基于用户提供的内容。需要简洁概括API网关的核心知识点、主流网关对比、真题实战和应用实践。摘要应简洁,不超过150字。注意用户要求“根据以下内容,生成≤150字的文章摘要”,我们将从提供的内容中提取关键点。</think>本文系统梳理API网关核心知识,包括路由转发、安全认证、限流熔断、协议转换与日志监控;对比Spring Cloud Gateway、Kong、Zuul性能与选型;解析2024年软考真题,并给出配置实践,助考

Mc、科 26

Kafka Streams 窗口统计怎么验收:本地跑订单流聚合,用 cpolar 给同事看只读结果页

本地用 Kafka Streams 跑订单流 5 分钟窗口聚合,把 WindowStore 结果做成只读页面,再用 cpolar 临时分享给同事验收。重点检查窗口边界、事件时间、正文图片和封面是否都走 CSDN direct 图链。

qq_63013137的博客 304

开源电商系统技术架构演进与选型方法论|2026 行业趋势深度解析

本文深度解析 2026 开源电商架构演进趋势,梳理三代商城架构迭代历程,从领域化架构、跨端能力、AI 协同、长期成本等维度,拆解 LikeShop、ShopXO、NiuShop、JavaShop、GoodGoods 多款主流系统技术特点与适用场景。文章指出行业重心已从功能比拼转向架构、生态竞争,提炼完整选型方法论,建议企业结合业务规模、技术团队、长期 TCO 综合评估,落地前做好实测验证,挑选适配中长期业务规划的数字化底座。

每天分享不同的文章 340

Java交易所开发进阶:订单簿内存优化——从ConcurrentSkipListMap到堆外存储

很多Java交易所的早期实现会直接采用ConcurrentSkipListMap作为订单簿的底层存储——它是JDK自带的线程安全跳表实现,存取时间复杂度均为O(log n),在高并发场景下表现优于ConcurrentHashMap,对于快速搭建原型而言确实是个合理的选择。更隐蔽的问题是,JVM在GC过程中需要遍历和标记堆内存中的存活对象,当订单簿数据量达到数GB级别时,GC的扫描开销会严重影响撮合线程的确定性延迟。它是一个完全在堆外内存中存储键值对的高性能并发Map,支持TB级别的数据量且不产生GC压力。

2601_96183616的博客 92

Java String 解析

现代 JVM 中,String 对象本身仍然位于堆中。所谓字符串常量池,可以理解为 JVM 维护的一张用于复用字符串的引用表,而不是“String 对象存放在堆外的另一个区域”。是不可变对象,两个 String 都不会修改这份底层字符数据,因此可以安全共享。如果池中已经存在内容为 “abc” 的 String 对象,则直接复用。StringTable 中保存对该 String 对象的引用。保存了对这个池化 String 对象的引用。它们是两个不同的 String 对象。不一定意味着重新创建一份。

Co_Hui的博客 244

企业微信客服场景告别手动切号:Spring Boot + Vue 把多账号会话聚合到一个窗口

企业微信客服工作台如何把多号会话、回调落库和 WebSocket 实时推送聚到一个独立窗口?本文基于 Spring Boot + Vue 的现网实现,拆解单例窗口、在线打网关/离线读库的会话列表、WebSocket 优先轮询兜底的实时通道,以及人工发送自动暂停 AI 的人机边界,并给出 Nginx 升级、离线兜底等落地清单。

WXID_Mrzhu0107的博客 165

JAVA 高级进阶02篇《并发编程三板斧:JMM、CAS与AQS的源码级拆解》

本文深度解析并发编程“三板斧”:JMM内存模型、CAS原子操作与AQS同步框架,结合JDK21源码剖析volatile可见性、CAS的ABA问题及AQS队列机制。通过库存扣减超卖事故复盘,揭示volatile不保证原子性的深层陷阱,强调在高并发场景下应采用CAS+volatile或AQS等正确选型,助力中高级Java开发者攻克2026年面试难题。

风吹淡了悲伤 137

Linux应用开发(三)——Linux的文件属性与目录

本文介绍了Linux系统编程中常用的文件属性和目录操作函数。主要内容包括:1. 文件属性相关函数:umask设置权限掩码、access检查文件权限、stat/fstat获取文件属性、getpwuid/getgrgid获取用户/组信息,并给出了实现stat命令功能的完整代码示例。2. 目录操作函数:opendir/closedir打开关闭目录、readdir读取目录内容、mkdir创建目录、rmdir删除目录、chdir切换目录,以及读取目录内容的实现代码。3. 重点说明了文件权限计算方式、文件类型判断方法、

weixin_55136196的博客 214

华为 ASG Manager 镜像日志接收链路故障排查流程

本文基于ASGManager V200R001C00SPC100与ASG5305设备,总结“控制台看不到日志”的排查经验。核心思路为:通过asg-diagnose.sh脚本快速定位故障链路——日志流转路径为设备syslog→服务器网卡→Pcap4j抓包→Storm处理→ClickHouse落库→Web展示。任一环节中断均会导致日志缺失。重点排查worker.log中的三个关键字(“设备名称不正确”“获取网络接口失败”“_handle为null”),结合PCAP_COUNT_LONG是否递增判断抓包状态。推荐

Merlyj的博客 101

4.java秒杀项目第四课-后端商品后台接口

在后台的Controller中对于需要登录权限的访问接口都要先获取Cookie中的Token,再使用Token从session中获取用户登录信息来判断用户登录情况决定是否放行。命名空间关联(Namespace): 在 TGoodsMapper.xml 文件中,根元素 的 namespace 属性设置为 com.yxl.seckill.mapper.TGoodsMapper,这正好对应于 TGoodsMapper.java 接口的全限定名。只需要在这个方法中进行处理即可。

yxl219的专栏 142

简单商城、在线客服管理系统

│ MySQL │ 5.7.433306 │ 三个服务各独立一库(admin_system / customer_service / online_customer_service) │。│ Redis │ 5.0.14.1(Windows 版) │ 6379 │ 客服/客户 token、坐席在线状态、技能组路由、限流、分配策略应急覆盖 │。消息发送 HTTP/WS 双通道 │。

stormeryang的专栏 26

Java全栈实战 | 1.1-02 IDEA 调教:把“高级记事本“改造成生产力神器,这 8 个配置值得一次做好

本文聚焦 IntelliJ IDEA 高效配置,提出“20%投入换80%效率”的实用策略。精选8项高ROI配置:核心快捷键、代码模板、自动导包、Maven国内镜像、Debug进阶技巧、必备插件清单、代码检查(Inspections)及配置同步。强调避免“裸奔”与“洁癖”两极,倡导以最小成本释放IDE最大潜能。附速查表与团队配置管理建议,助力开发者快速上手,专注编码。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 312

java:Observer Pattern

主要描述一个Java项目,包含珠宝流程DTO、日志系统、熔断器、DI容器、观察者模式等。摘要应概括核心:这是一个Java实现的珠宝业务流转系统,用观察者模式让各部门(采购、设计、加工、质检等)订阅流程事件,并通过日志系统记录,配合熔断重试、DI容器等增强健壮性。

Geovin Du Dream Park 279

Mercury 2.5 发布:当扩散大模型跑到 1,107 tokens/sec —— dLLM 的延迟经济学与 Java/Python 落地实战

2026 年 9 月 8 日(UTC),Inception Labs 正式发布 Mercury 2.5。根据官方博客,这是目前市场上能力最强的扩散式大语言模型(diffusion LLM,简称 dLLM),也是官方声称"有史以来训练过的最大扩散语言模型"。的生成速度、260K的上下文窗口、以及发布期$0.04/百万输入 token的促销价格。)与 Baseten。这篇文章不重复新闻稿,而是回答三个工程问题:扩散式生成到底快在哪里?

超人不会飞 277

JavaScript 数据类型完全指南

本文深入剖析JavaScript类型系统,从栈堆内存模型揭示原始类型与引用类型的本质差异,澄清“按引用传递”误解,详解7大原始类型(尤其Number的浮点精度、安全整数范围、NaN/Infinity/−0等特殊值),并梳理类型转换、检测、序列化等核心机制,直击0.1+0.2!==0.3、[]==![]等经典陷阱,提供工程级解决方案,助开发者规避深层坑点。

小李同学的博客 444

JAVA 高级进阶09篇《Redis深度实战:缓存三兄弟、分布式锁与集群高可用》

本文深度解析Redis缓存三兄弟(穿透、击穿、雪崩)的原理与防御策略,详解布隆过滤器防穿透、延迟双删保一致性、Redlock分布式锁的争议与实践,并深入剖析Redis Cluster的16384槽机制与Gossip协议。结合源码级实现,如Redisson看门狗续期机制,全面覆盖2026年中高级Java面试核心考点,助力高效备战。

风吹淡了悲伤 260

GcExcel 服务端 Excel 组件:无需安装 Office 的 Java/.NET 报表方案

服务端生成 Excel 一定要装 Office 吗?GcExcel 给出了另一种答案:不依赖 Microsoft Office 即可完成工作簿创建、公式计算与多格式导出;支持 Excel 模板 + 数据源绑定,把版式调整从代码里剥离。本文含完整 Java 示例代码,并列出选型前值得实测的 6 个验证维度。

励志做最业余的专业博主,控件产品可以私我~ 114
上一篇: scrapy
下一篇: Document
github_28583061
博客等级 码龄11年 7粉丝 180原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值