Spark数据倾斜问题+解决方案

1、数据倾斜

数据倾斜指的是,并行处理的数据集中,某一部分(如Spark或Kafka的一个Partition)的数据显著多于 其它部分,从而使得该部分的处理速度成为整个数据集处理的瓶颈

数据倾斜俩大直接致命后果

1)数据倾斜直接会导致一种情况:Out Of Memory

2)运行速度慢

主要是发生在Shuffle阶段。同样Key的数据条数太多了。导致了某个key(下图中的80亿条)所在的Task数 据量太大了。远远超过其他Task所处理的数据量

图片

一个经验结论是:一般情况下,OOM的原因都是数据倾斜

2、如何定位数据倾斜

数据倾斜一般会发生在shuffle过程中。很大程度是使用可能会触发shuffle操作的算子:distinct、groupByKey、reduceByKey、aggregateByKey、join、cogroup、repartition等。

查看任务->查看Stage->查看代码

图片
4. 定位 SQL 代码

  1. 确定任务卡住的 stage

通过 jobname 确定 stage:

一般 Hive 默认的 jobname 名称会带上 stage 阶段,如下通过 jobname 看到任务卡住的为 Stage-4:

在这里插入图片描述

如果 jobname 是自定义的,那可能没法通过 jobname 判断 stage。需要借助于任务日志:

找到执行特别慢的那个 task,然后 Ctrl+F 搜索 “CommonJoinOperator: JOIN struct” 。Hive 在 join 的时候,会把 join 的 key 打印到日志中。如下:
在这里插入图片描述

上图中的关键信息是:struct<_col0:string, _col1:string, _col3:string>

这时候,需要参考该 SQL 的执行计划。通过参考执行计划,可以断定该阶段为 Stage-4 阶段:
在这里插入图片描述

  1. 确定 SQL 执行代码
  • 6
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spark数据倾斜调优是指使用各种技术方案解决不同类型的数据倾斜问题,以提高Spark作业的性能。数据倾斜调优的目的是解决数据倾斜带来的性能问题。 在数据倾斜发生时,常见的现象包括某些任务运行时间过长、资源利用不均衡等。为了解决这些问题,可以采取不同的方案进行调优。 对于聚合类的shuffle操作导致的数据倾斜,可以采用一些方案进行处理。其中,一种方案是使用随机前缀进行数据重分区,即在数据倾斜的key上添加一个随机前缀,将数据均匀分散到不同的分区中。这样可以有效地解决数据倾斜问题,并提高Spark作业的性能。 对于join操作导致的数据倾斜,可以采用另一种方案进行处理。该方案是使用广播变量将小表数据复制到每个Executor上,在Executor端进行join操作,从而避免shuffle过程,进而解决数据倾斜问题。这种方案非常有效,因为根本不会发生shuffle,也就不会出现数据倾斜现象。 综上所述,Spark数据倾斜调优可以通过使用不同的方案解决不同类型的数据倾斜问题,从而提高Spark作业的性能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Spark性能优化指南](https://blog.csdn.net/qq_36951116/article/details/113448763)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值