解决spark streaming 聚合算子(shuffle)并行度200及缓存buffer不断增大的问题

技本功|Hive优化之Spark执行引擎参数调优(二) Hive是大数据领域常用的组件之一,主要是大数据离线数仓的运算,关于Hive的性能调优在日常工作和面试中是经常涉及的的一个点,因此掌握一些Hive调优是必不可少的一项技能。影响Hive效率的主要有数据倾斜、数据冗余、job的IO以及不同底层引擎配置情况和Hive本身参数和HiveSQL的执行等因素。本文主要结合实际业务情况,在使用Spark作为底层引擎时,通过一些常见的配置参数对报错任务进行调整优化。 下面从两个方面对复杂任务的优化: Spark资源参数优化 主要针对Spark运行过程中各个使用资源的地方, 阅读详情
  • 问题现象:

spark流式计算中做聚合需要使用 group by算子,我在使用过程中遇到一些问题,通过stage图可以看出2个问题:

1. 聚合算子每个批次shuffle write的数据量直线上升,这样会导致算子得效率逐渐降低,甚至会导致oom

2.聚合算子(shuffle)的并行度是200,即使设置spark.sql.shuffle.partitions=10也不生效。200并行度会增加调度压力,并且会把并行度传递到下游(如果不做repartition)。我的业务中会把数据写入iceberg中,发现每个批次都会产生大量的小文件,这对hive metastore产生了巨大压力!

  •  问题定位:

1. 通过现象可以看出,即使聚合算子的输入只有1M,它的输出也有63M,并且不断递增。因此可以推断是算子中有大量的状态数据,导致每个批次数据的计算既有新批次数据,也有大量的状态数据。通过spark structured streaming官方文档可以发现原因,当Output mode使用Complete的时候,聚合函数不会丢弃过去的聚合状态,因此会保留所有数据到输出。

 2. 我们可以看到聚合算子每次的shuffle read的数据量都有几十M,可以推断是spark的自适应框架自动将该算子的并行度设成了200。

  • 问题解决:

1. 很显然,只需要将output mode改成append或update即可,使用哪一个可以根据自身业务要求选择,我使用了append模式。在这期间可能会遇到另一个奇怪的问题,虽然指定了watermark,但是会出现报错:

org.apache.spark.sql.AnalysisException: Append output mode not supported when there are streaming aggregations on streaming DataFrames/DataSets without watermark;;

Dataset<Row> targetDf = df
	.withWatermark("event_ts", "1 minute")
	.groupBy(functions.window(df.col("event_ts"), "1 minutes", "1 minutes", "0 second"), df.col("id"))

 这里是因为withWatermark会产生一个新的流Dataset<Row>,并将watermark加入到这个数据流中,如果聚合算子使用df.col(),则对应的列中是没有watermark的,因此会由上面的报错。改证候的代码如下:

Dataset<Row> targetDf = df
	.withWatermark("event_ts", "1 minute")
	.groupBy(functions.window(functions.col("event_ts"), "1 minutes", "1 minutes", "0 second"), functions.col("id"))

2. 使用Append模式后,shuffle read的数据量降低到1M,spark.sql.shuffle.partitions=10开始生效

  • 结果展示

改正后重新运行,可以看到无论是聚合算子的并行度,还是shuffle write的数据量都已经和预期一致!


 

Spark分区方式详解 一、Spark数据分区方式简要              在Spark中,RDD(Resilient Distributed Dataset)是其最基本的抽象数据集,其中每个RDD是由若干个Partition组成。在Job运行期间,参与运算的Partition数据分布在多台机器的内存当中。这里可将RDD看成一个非常大的数组,其中Partition是数组中的每个元素,并且这些元素分布在多台机器中。... 阅读详情

相关推荐

Spark架构深度解析:Driver-Executor协作与Shuffle内存机制

Apache Spark 不是简单的内存计算引擎,而是一套分层抽象与动态契约并存的分布式执行框架。其核心在于 Driver 与 Executor 的协同调度机制、Shuffle 数据流动的生命线设计,以及 Execution/Storage/User 三层内存的弹性博弈。理解 Catalyst 优化器如何将逻辑计划坍缩为物理算子,掌握 Tungsten 引擎对 UnsafeRow 和序列化的底层控制,才能真正规避 OOM、Stage 卡顿和资源争抢等典型问题。本文聚焦 Spark 架构本质,覆盖微批流处理抽

weixin_30596343的博客 558

大数据-Spark调优(一)

大数据-Spark调优(一) 分配更多的资源 分配更多的资源是性能优化调优的王道,就是增加和分配更多的资源,这对于性能和速度上的提升是显而易见的,基本上,在一定范围之内,增加资源与性能的提升,是成正比的;写完了一个复杂的spark作业之后,进行性能调优的时候,首先第一步,就是要来调节最优的资源配置; 在这个基础之上,如果说你的spark作业,能够分配的资源达到了你的能力范围的顶端之后,无法再分配更多的资源了,公司资源有限;那么才是...

海恋北斗星 2090

Spark核心知识点和面试高频考点

Apache Spark 是一个开源的统一分布式计算引擎,它以内存计算为核心,提供了 Java、Scala、Python、R 等高级 API,并提供以下功能:Spark Core(核心基础):负责分布式任务调度、内存管理、容错、存储交互等基础功能。它引入了 RDD(弹性分布式数据集) 这一核心抽象,是所有其他组件的基石。Spark SQL(结构化数据处理):用于处理结构化与半结构化数据,提供了DataFrame、Dataset,以及SQL查询引擎。底层也是基于RDD进行了封装优化。Spark Streami

qq_37771475的博客 779

漫谈大数据 - Spark SQL详解,参数调优

SparkSQL详解,底层原理,执行过程,参数调优

引用原创内容标明出处即可 2万+

PySpark groupBy性能优化实战:从shuffle原理到数据倾斜治理

在分布式计算中,数据聚合是ETL与OLAP的核心操作,其底层依赖于Shuffle机制实现跨节点键值重分布。PySpark的groupBy并非Pandas式内存分组,而是触发Exchange hashpartitioning的物理重分区过程,直接影响集群资源消耗与作业稳定性。理解Catalyst如何优化聚合合并、局部预聚合及谓词下推,是降低Shuffle开销的关键;而面对数据倾斜、高基数分组或实时流场景,需结合repartition预分区、盐值法、两阶段聚合及rollup/cube等高级语义工具进行工程化治理

493

Spark大数据平台在气象数据分析中的架构设计与工程实践

大数据处理技术已成为应对海量、多源、高维数据的核心解决方案。其核心原理在于通过分布式计算框架,将计算任务分解到多个节点并行执行,从而实现对PB级数据的高效处理。这项技术的价值在于能够将通用、可扩展的计算能力赋能于气象、环境等传统科学领域,解决其数据处理在效率与灵活性上的瓶颈。典型的应用场景包括区域历史气候统计、台风路径附近气象要素提取、城市热岛效应分析等时空数据分析任务。本文以Apache Spark这一主流大数据引擎为例,结合GeoSpark(Sedona)空间计算扩展,详细阐述了如何构建一个完整的气象数

迷彩风情 303

Spark Streaming 总结整理(二):Spark Streaming 性能调优

参考: https://www.cnblogs.com/gaopeng527/p/4961701.html https://www.cnblogs.com/wq920/p/7099129.html

super_wj0820的博客 392

Hadoop生态分层能力模型与生产级协同实践

Hadoop生态本质上是一套分层协作的分布式数据操作系统,其核心价值不在于工具堆砌,而在于按需补足存储增强、计算加速、查询交互和数据治理四层能力缺口。理解YARN资源调度、HDFS数据访问模式与ZooKeeper协调机制这三大物理连接点,是实现Hive、Spark、HBase等组件稳定协同的基础。尤其在实时分析、交互式查询与高并发在线服务等典型场景中,脱离分层逻辑的盲目选型极易导致资源浪费与SLA失控。本文聚焦真实生产环境中的能力断层识别、跨组件配置咬合及典型协同坑点,为构建可演进的大数据平台提供工程化路线

Coding 522

Spark 核心知识完全总结

Spark核心技术与优化摘要 Apache Spark作为统一的大数据处理引擎,其核心优势在于内存计算和DAG执行模型。主要特点包括:基于RDD的弹性分布式数据集、高效的DAG调度机制(以Shuffle为界的Stage划分)、统一内存管理(执行内存与存储内存动态借用),以及多种Shuffle优化策略(SortShuffle为默认方案)。针对数据倾斜问题,可通过加盐打散、扩大分区等方案解决。SparkSQL通过Catalyst优化器和Tungsten引擎实现高效查询,而Structured Streaming

m0_63960309的博客 707

Spark 之 Shuffle & AQE

shuffle

zhixingheyi_tian的博客 2886

USB摄像头开发实战:从参数配置到图像采集的完整流程(Python+OpenCV)

本文详细介绍了USB摄像头开发的完整流程,从参数配置到图像采集,使用Python和OpenCV实现。内容涵盖硬件原理、环境配置、参数调优及高级优化技巧,帮助开发者解决常见问题如分辨率设置、帧率控制和灯光频闪等,提升开发效率。

star的博客 235

Spark四大核心能力选型指南:从数据形态到落地实践

Apache Spark并非工具集合,而是一个统一计算引擎,其真正价值体现在对结构化、流式、机器学习和图计算四类数据场景的抽象支持。理解Spark SQL的Catalyst优化器原理、Structured Streaming的微批机制、MLlib的分布式训练范式以及GraphX的状态管理边界,是避免技术误用的前提。这些能力的技术价值在于将业务语义(如延迟要求、数据分布、团队技能)精准映射为执行计划与资源调度策略。典型应用场景包括实时风控中的分钟级聚合、电商推荐的流式特征更新、金融图谱的社区发现等。本文基于生

csobhtdx34120的博客 459

【Gin框架入门到精通系列01】Gin框架介绍与环境搭建

本文是Gin框架入门到精通系列的第一篇,系统介绍Gin框架的基本概念、核心特性以及环境搭建。无论你是Go语言新手还是有经验的开发者,都能通过本文快速掌握Gin框架的基础知识,创建并运行你的第一个Gin应用。

GopherTribe的博客 1559

Spark分布式计算原理与生产调优实战指南

分布式计算是现代大数据处理的基石,其核心在于突破单机瓶颈,通过协同调度实现数据与计算的高效匹配。其底层逻辑受制于内存、磁盘与网络的三级性能鸿沟,而Spark通过内存计算、DAG执行模型和统一API重构了这一范式。相比传统MapReduce,Spark以Shuffle优化、智能缓存(如MEMORY_AND_DISK_SER)和Catalyst优化器显著提升迭代计算与混合负载效率。在电商用户分析、金融反欺诈等PB级场景中,合理配置spark.sql.adaptive.enabled、Kryo序列化与AQE机制,

baichuan9723的博客 459

用ADS2023手把手仿真SKYWORKS SMA1234变容二极管:从Datasheet到S参数结果全流程

本文详细介绍了如何使用ADS2023仿真SKYWORKS SMA1234变容二极管的全流程,从Datasheet参数解析到S参数结果验证。通过等效电路建模、关键公式编写和仿真设置,帮助工程师掌握变容二极管在射频电路设计中的应用技巧,提升仿真精度和工程实践能力。

weixin_29233333的博客 501

解密电商大促背后的智慧:LSTM与ARIMA模型的双剑合璧

举个例子,如果某东发现某款新推出的电子产品在促销前夕搜索量突然暴涨,虽然这个产品没有过去的销售记录,但LSTM模型可以结合用户对类似产品的行为模式、实时的市场反馈,迅速捕捉到这些变化,并预测这款产品在大促期间的需求会急剧上升。想象一下,如果预测不准确,备货不足,商品很快就卖光了,大量用户可能在促销期间买不到想要的商品,这不仅让用户失望,还会影响某东的品牌形象。这种情况就像我们看一部很长的电视剧,看得越久,前面的情节可能就越来越模糊,到最后有些关键的情节细节都忘了,影响了对整个剧情的理解。

小蒋聊技术 2090

Spark生产架构深度解析:从调度机制到内存管理的实战真相

Apache Spark作为主流大数据计算引擎,其核心价值在于DAG执行模型与内存计算能力。理解其底层原理需超越RDD、Stage等基础概念,深入调度粒度、Executor内存分层(堆内/堆外/Code Cache)、Shuffle数据流生命周期及序列化机制等关键技术环节。真实生产环境中,性能瓶颈往往源于YARN资源协调延迟、Off-heap内存失控、AQE配置误用或Shuffle文件丢失等非教科书场景。本文聚焦Spark 3.x在CDH/YARN环境下的高可靠运行实践,结合Scheduler Delay诊

weixin_30701575的博客 465

使用moveit控制机械臂

位置设置:`target_pose.position.x = 0.12`, `target_pose.position.y = 0.41`, 和 `target_pose.position.z = 0.44` 分别设置了机械臂末端执行器的X, Y, 和 Z坐标。设定目标位置:`group.set_pose_target(target_pose)` 这一命令将之前定义的目标位置和姿态设置为当前机械臂组的目标,为接下来的路径规划做准备。在机械臂控制的过程中,设定精确的目标位置和姿态是实现精确操作的关键步骤。

realman_Rop的博客 3686

数据工程师实战指南:Hadoop、Spark、Flink等五大框架生产调优与避坑

大数据(Big Data)指在分布式环境下对海量、高速、多样数据进行采集、存储、计算与服务的系统性工程能力。其核心原理在于通过分而治之(Shuffle/Partition)、容错重试(Speculative Execution/Checkpointing)和统一资源调度(YARN/K8s)保障SLA。技术价值体现在降低TCO、提升分析时效性与支撑实时决策闭环。典型应用场景包括电商用户行为分析、金融风控实时拦截、IoT设备时序处理等。本文聚焦Hadoop、Spark、Flink、Hive、Storm五大高频框

weixin_30772105的博客 777

LLC 谐振变换器开发设计1

本文档详细介绍了基于DSP28335的LLC谐振变换器开发设计。系统采用频率调制(FM)控制方式,实现高效率、高功率密度的隔离型DC/DC变换。文档阐述了LLC拓扑结构和工作原理,给出了谐振频率、品质因数等关键参数的计算公式。硬件设计包括功率器件选型和采样电路实现,软件部分提供了DSP28335的核心控制算法和代码示例,涵盖频率转换、PI控制和PWM生成。系统还设计了启动策略和保护机制,确保可靠运行。该设计实现了主开关零电压开通和低纹波输出特性。

328

解决微信小程序长页面滚动到底部点击底部的输入框后输入框漂浮且页面滚动到顶部

一、问题描述 项目中有一个长页面上部展示部分信息下部为信息录入,页面长度为三屏幕(不同手机屏幕大小略有差异),当滚动到第二屏或者第三屏去填写信息时点击输入框后输入框漂浮起来了并且页面向上滚动了一段距离,回到了第一屏中展示的内容。效果如图。 滚动到第二屏,证件号输入。 点击输入框 可以看到证件号输入框漂浮了起来并且页面滚动到了第一屏展示的内容。 注意:小程序是2018年上线,在2020年4月份之前该页面从未出现过这种现象。推测:微信的后续更新中对微信小程序基础库进行了重构,导致点击输入框后页

仰望星空的代码 3254

Apache Spark 从入门到实践:核心架构、环境搭建与数据分析案例详解

大数据处理的核心挑战在于如何高效、可扩展地处理海量数据。内存计算技术通过将中间数据尽可能保留在内存中,避免了传统磁盘I/O带来的性能瓶颈,从而大幅提升了数据处理速度。Apache Spark作为领先的分布式内存计算框架,其核心原理基于弹性分布式数据集(RDD)和DAG调度引擎,实现了任务的惰性求值与并行执行。这一技术为迭代式机器学习、交互式查询等场景带来了数量级的性能提升。在工程实践中,开发者常面临环境配置、依赖管理(如解决 `object spark is not a member of package

weixin_30387423的博客 378

YOLO26涨点改进 | 独家主干改进篇 | CVPR 2024 | YOLO26利用InceptionNeXt主干,将大核深度卷积分解为四个并行分支,在提升性能的同时显著降低计算效率

本文聚焦YOLO26的核心涨点改进——基于CVPR 2024收录的InceptionNeXt主干网络,深度拆解了其“大核深度卷积四分支拆解”的核心逻辑,通过实验验证了改进的有效性,同时提供了可快速复现的工程代码与进一步涨点的思路。

qq_36130719的博客 573

Spark RDD编程实战:巧用distinct与reduceByKey实现高效数据去重

本文详细介绍了Spark RDD编程中distinct与reduceByKey两种高效数据去重方法的实战应用。通过对比分析它们的性能差异、适用场景及优化技巧,帮助开发者在大数据处理中选择合适的去重策略,提升Spark作业执行效率。文章包含电商日志去重等实际案例,展示了如何应对数据倾斜等常见问题。

diyudong4681的博客 386

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

从Spark API使用者到性能调优专家:原理、实战与避坑指南

分布式计算框架是处理海量数据的核心技术,其通过将计算任务分解并分配到多台机器并行执行,以解决单机资源瓶颈。其核心原理在于任务调度、数据分区与跨节点通信(Shuffle)。理解这些原理对于实现高效数据处理至关重要,能直接提升作业执行速度并降低资源消耗。在实际工程中,性能调优与问题排查是衡量开发者水平的关键,涉及内存管理、数据倾斜处理等核心技能。本文以Apache Spark这一主流框架为例,深入剖析其Driver-Executor架构与Stage划分机制,并通过一个完整的电商日志分析案例,手把手演示如何从环境

weixin_33796205的博客 335

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Synapse ML:用Spark DataFrame统一AI工程化流水线

Apache Spark 作为成熟的大数据处理引擎,其核心价值在于分布式计算与SQL/DataFrame抽象的统一性。当机器学习工程面临多框架胶水代码、跨系统数据搬运和模型服务割裂等典型痛点时,AI工程化亟需一种能深度融入现有数据栈的轻量级集成范式。Synapse ML 正是这一需求的实践答案——它不替代Scikit-learn或PyTorch,而是将各类AI能力(如ONNX模型、LightGBM、认知服务)封装为Spark原生Transformer算子,实现predict()调用与filter()/joi

cuili5839的博客 318

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: HIVE Sql 笛卡尔积关联导致查询过慢问题优化
下一篇: Flink cdc写入kafka数据出现null的问题排查与解决
soaring0121
博客等级 码龄17年 2941粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值