Apache Spark_解决生产环境数据倾斜问题方案及思路

问题背景

在大数据处理中,数据倾斜是指在分布式计算中,某些节点处理的数据量远大于其他节点,导致计算资源的不均衡使用,从而影响整体的计算性能。本文将介绍如何使用Apache Spark(特别是Scala API)处理数据倾斜问题。

我司在处理超大数据量级别数据时,经常出现数据倾斜的情况,因此基本上都是看yarn的执行情况,本来10分钟能执行完毕的,拖到半小时甚至一个小时的情况,甚至再有的数据两三个小时跑完的,半天都跑不完的情况。看Excutor往往卡在几个节点上的数据超大,比如几十个G,其他节点500多M左右这种。基本上就是数据倾斜了。

针对以上场景,我进行数据倾斜的常用办法及解决办法。

数据倾斜导致的问题

  1. 资源利用不均衡:少数节点负载过高,而其他节点闲置或负载较低。

  2. 任务执行时间变长:负载高的节点需要处理更多数据,导致任务执行时间变长,成为整个作业的瓶颈。

  3. 内存不足或 OOM(Out of Memory):单个节点处理的数据量过大,可能导致内存不足,甚至触发 OOM 错误。

  4. 作业失败:如果倾斜严重,可能导致任务失败,进而导致整个作业失败。

如何判断数据倾斜?

  1. Spark UI 观察:

    • 在 Spark UI 的 Stages 页面中,查看每个任务的执行时间。

    • 如果某些任务的执行时间明显比其他任务长,且输入数据量(Input Size)远大于其他任务,则可能存在数据倾斜。

    • 在 Executors 页面中,查看每个 Executor 的数据处理量,如果某些 Executor 处理的数据量远大于其他 Executor,则可能存在数据倾斜。

  2. 日志分析:

    • 查看日志中是否有 OOM 错误或任务失败的信息。

    • 如果有大量任务在少数节点上失败或重试,则可能存在数据倾斜。

  3. 数据分布统计:

    • 对数据进行统计,查看某些 key 的数据量是否远大于其他 key。

    • 例如,使用 groupByKey 或 countByKey 统计每个 key 的数据量。

数据倾斜的解决办法(针对我开头说的情况)

1. 数据重分区(Repartition)

1.如果数据倾斜是由于分区不均匀导致的,可以通过增加分区数来使数据分布更均匀。

Scala 复制代码
// 增加分区数,这个你得看情况啊
val repartDataDF = dataDF.repartition(1000)

2. 随机前缀(Salting,也就是我们常说的加盐!!)

1.如果数据倾斜是由于某些 key 的数据量过大导致的,可以为这些 key 添加随机前缀,将数据分散到多个分区。

Scala 复制代码
val saltedData = dataDF.map(row => {
  val key = row.getString(0)
  // 添加随机前缀
  val randomSuffix = scala.util.Random.nextInt(10) 
  (s"$key-$randomSuffix", row)
})

3.广播变量(Broadcast Variables)

1.如果数据倾斜是由于小表连接大表导致的,可以将小表广播到每个节点。

Scala 复制代码
val broadcastSmallDataDF = spark.sparkContext.broadcast(smallDataDF.collect().toMap)

val resultDF = largeDataDF.mapPartitions(partition => {
  val smallDataMap = broadcastSmallData.value
  partition.map(row => (row, smallDataMap.get(row.getString(0))))
})

4.调整并行度

1.如果数据倾斜是由于分区数不足导致的,可以调整并行度。

Scala 复制代码
//我一搬都是这么做的
//注意哈,分区数最好是2~3倍的ecutor个数乘以excuor核数
spark.conf.set("spark.default.parallelism", "1000")

完毕!当然,其他的小表广播也很常见,看生产实际用啥吧,后续再补充

相关推荐
Easy_API5 小时前
2.8万亿参数,编程反超GPT-6 Astra:Kimi K3.1 Pro把开源模型推到了哪一步
大数据·人工智能·gpt·深度学习
GlobalInfo5 小时前
2026年机器人多指灵巧手市场分析报告——涵盖行业调查、趋势分析与发展前景
大数据·人工智能·microsoft·微服务·机器人
微订校园外卖平台7 小时前
校园外卖平台选模板还是定制:架构、数据流与验收清单
大数据·架构·外卖系统·本地生活·微订
Eloudy8 小时前
Qwen2.5-14B-Instruct-AWQ 模型文件结构分析
大数据·elasticsearch·搜索引擎
重生之高冷汉堡包11 小时前
跨境电商运营团队如何安全交接店铺账号?多账号权限管理指南
大数据
玩AI的奶茶11 小时前
MiniMax H3 出 30 秒长片:显存账、拼接法和一次的成本
大数据·人工智能·ai·gpu算力·算力租赁
SelectDB11 小时前
Doris Arrow Flight SQL 高速读取协议实战:与 Snowflake 客户端取数链路对照
大数据·数据库·数据分析
爱签AI电子合同12 小时前
电子合同全维度实测与选型指南
大数据·人工智能
AI办公探索者12 小时前
从SaaS到本地部署:大模型推理成本优化与8888元私有化方案的技术解析
大数据·人工智能
做运维的阿瑞12 小时前
云项目可观测性与成本治理:告警、日志、Dashboard 与预算标签
大数据·云原生·云计算·terraform