Spark Shuffle调优之合并map端输出文件

 

本篇文章为Spark shuffle调优系列第一篇,主要分享Spark Shuffle调优之合并map端输出文件。

 

默认的shuffle过程如下图所示:

其中第一个stage中的每个task都会给第二个stage的每个task创建一份map端的输出文件;

第二个stage中每个task会到各个节点上面去拉取第一个stage中每个task输出的,属于自己的那一份文件。

问题来了:默认的这种shuffle行为,对性能有什么样的恶劣影响呢?

假设实际生产环境的条件如下:

100个节点(每个节点一个executor):100个executor

每个executor:2个 cpu core

总共1000个task:每个executor平均10个task

每个节点中包含10个task,每个节点会输出10 * 1000=1万 份map端文件

总共有多少份map端输出文件?100 * 10000 = 100万。

通过上面的分析,一个普通的生产环境的spark job的一个shuffle环节,会写入磁盘100万个文件。

shuffle中的写磁盘的操作,基本上就是shuffle中性能消耗最为严重的部分。

磁盘IO对性能和spark作业执行速度的影响,是极其惊人和吓人的。基本上,spark作业的性能,都消耗在shuffle中了,虽然不只是shuffle的map端输出文件这一个部分,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值