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

【Spark性能调优】长尾任务如何优化

背景

Spark 长尾任务是指在 Spark 作业中,大部分任务都很快完成,但少数任务运行时间非常长,拖慢了整个作业的执行速度。 这些长尾任务就像一条长长的“尾巴”,拉低了整体性能。这种现象通常会在数据倾斜、资源分配不均或任务调度等方面表现出来。

数据倾斜

问题根源

数据倾斜是导致长尾任务最常见的原因。 当数据分布不均匀时,某些 Executor 会分配到比其他 Executor 多得多的数据,导致这些 Executor 上的任务运行时间过长。

解决方法

避免使用groupByKey

因为它会将所有相同键的数据聚集到一个节点上,导致数据倾斜。优先使用 reduceByKey 或 aggregateByKey 来减少数据的传输量。

数据分片

检查数据的分布情况,确保数据在不同的分区之间均匀分布。可以使用 salting 技术向键添加随机前缀,增加数据的随机性,从而减少倾斜。

使用 coalesce 或 repartition

在执行之前,使用这些函数调整分区数量以帮助平衡负载。通过合并小文件看少task的数量

使用广播小表

如果 Join 操作中有一个表比较小,可以将其广播到所有 Executor,避免数据 Shuffle。

使用 Spark SQL 的优化策略

例如,使用 skew hint 提示 Spark SQL 引擎对数据倾斜进行优化。

设置匹配的并行度

问题根源

Spark的并行度(spark.default.parallelism 和 spark.sql.shuffle.partitions 参数来设置并行度)和executor的核心数和个数不匹配

解决方法

一个Spark Application能并行的task,其实可以认为每个cpu执行一个task。所以如果有10个executor,每个executor有5个cpu,所以这个Spark Application一共可以并发执行50个task。如果配置的并行度小于50,说明资源没有充分利用,可以调整参数优化。

资源配置不合理

问题根源

如果 Executor 的资源配置过低,例如内存不足或 CPU 核数过少,会导致任务运行缓慢,窄依赖高的任务可能卡在某一个task,在sparkui中并行的task没有跑满,没有充分利用资源,都在等某一个task。

解决方法

可能是由于单个executor核心数或内存数过少,导致单个task跑的有问题。如果频繁出现,可以尝试减少executor个数,增加单个executor内存和cpu。如果是偶现的,可以看一看执行慢的task所在节点,是不是磁盘I/O存在问题。如果可以在每台机器上加装磁盘利用率,网络利用率监控是最好的。

代码逻辑不合理

去看长尾任务在做的业务逻辑,这部分业务逻辑真的一定要这么做吗,一定要这么实现吗。实现上可不可以把数据打散,分散成更多的task去并发执行。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • robosuite基础教程(一)——基本概念
  • 如何解决“json schema validation error ”错误? -- HarmonyOS自学6
  • fiddler抓包01:工具介绍
  • 时序必读论文11|ICLR23 TimesNet时间序列分析的二维变化建模
  • Https AK--(ssl 安全感满满)
  • 24.9.16数据结构|平衡二叉树
  • uniapp中实现<text>文本内容点击可复制或拨打电话
  • Miracast/WifiDisplay开发相关的深入调研分析-android投屏实战开发
  • PMP--一模--解题--111-120
  • 数据结构-链表
  • 【Java集合】ArrayList
  • Java HashMap 总结
  • LeetCode-160.相交链表
  • C#学习笔记(三)Visual Studio安装与使用
  • 第十一章 【后端】商品分类管理微服务(11.1)——创建父工程
  • SegmentFault for Android 3.0 发布
  • git 常用命令
  • GitUp, 你不可错过的秀外慧中的git工具
  • HTML中设置input等文本框为不可操作
  • Linux中的硬链接与软链接
  • Meteor的表单提交:Form
  • Netty 4.1 源代码学习:线程模型
  • 给Prometheus造假数据的方法
  • 来,膜拜下android roadmap,强大的执行力
  • 那些年我们用过的显示性能指标
  • 悄悄地说一个bug
  • 区块链技术特点之去中心化特性
  • 数据仓库的几种建模方法
  • 追踪解析 FutureTask 源码
  • kubernetes资源对象--ingress
  • Mac 上flink的安装与启动
  • postgresql行列转换函数
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (二)构建dubbo分布式平台-平台功能导图
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (四) 虚拟摄像头vivi体验
  • (四)库存超卖案例实战——优化redis分布式锁
  • (原创)可支持最大高度的NestedScrollView
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)关于多人操作数据的处理策略
  • (转)可以带来幸福的一本书
  • .DFS.
  • .FileZilla的使用和主动模式被动模式介绍
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .NET上SQLite的连接
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • @Async 异步注解使用
  • [23] 4K4D: Real-Time 4D View Synthesis at 4K Resolution
  • [AX]AX2012 AIF(四):文档服务应用实例
  • [bzoj2957]楼房重建