解惑:这个 Spark 任务是数据倾斜了吗?

栏目: 编程工具 · 发布时间: 5年前

内容简介:健身回来的路上,看到微信群里聊技术,一群有问了一个神奇的问题,具体可以看如下截图:

解惑:这个 Spark 任务是数据倾斜了吗?

健身前后对比

健身回来的路上,看到微信群里聊技术,一群有问了一个神奇的问题,具体可以看如下截图:

解惑:这个 Spark 任务是数据倾斜了吗?

哥们给出的结论是repartition导致的数据倾斜,我给他详细的回复了说明了不是数据倾斜。那么接下来,我们就仔细分析一下原因。

为了大家更彻底的了解这块内容,文章底部浪尖也录制了一个小视频。

解惑:这个 Spark 任务是数据倾斜了吗?

那哥们数是repartition导致的数据倾斜原因,是由于前三行数据输入和输出都是好几百兆,而后面的都是只有几个MB的输入,0B输出,所以下结论是数据倾斜。

浪尖纠正他是错的原因是数据倾斜往往指的是同一个stage内部: 有的task数据量大,有的task数据量小,task间数据量大小差距比较大,而这个明显不是 。这个是executor的页面,可以看complete task列,会发现前三行占据了几乎所有task执行,完成的task数是其余的十几二十倍。这个就是导致前三行输入输出数据量比较大的原因。

数据本地性是导致这个问题的根本原因。由于数据本地性task调度会优先调度到数据所在的executor机器,假如机器executor存在执行中的task会等待一个时间,在这个时间内task执行完,新task会直接调度到该executor上。如此往复,导致executor处理的task差距比较大。

官网给出了关于spark调度task的时候数据本地性降级的等待时间配置。

解惑:这个 Spark 任务是数据倾斜了吗?

很简单,将3s设置为0s,然后结果就是task不会等待数据本性降级,就立即调度执行。

其实,根源还是kafka 创建topic的时候 partition数目没有够。单个parition的吞吐量是可以达到数万qps,但是结合业务逻辑,不同的数据输出位置,吞吐量会急剧下降,所以topic分区数,应该根据处理逻辑和落地位置,磁盘数,综合考虑设置。

还有一点就是分析问题不准确,关于spark streaming性能瓶颈分析和解决方法,浪尖在知识星球里做了详细的分析,建议大家加入知识星球。

加入知识星球二维码

解惑:这个 Spark 任务是数据倾斜了吗?

关于知识星球能学到啥可以阅读

深入系统掌握大数据

微信群,可以加浪尖微信

解惑:这个 Spark 任务是数据倾斜了吗?


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Algorithms + Data Structures = Programs

Algorithms + Data Structures = Programs

Niklaus Wirth / Prentice Hall / 1975-11-11 / GBP 84.95

It might seem completely dated with all its examples written in the now outmoded Pascal programming language (well, unless you are one of those Delphi zealot trying to resist to the Java/.NET dominanc......一起来看看 《Algorithms + Data Structures = Programs》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

MD5 加密
MD5 加密

MD5 加密工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具