Spark性能优化指南-高级篇.pdf


立即下载 滔滔江水
2024-05-07
数据 task Spark 倾斜 key 运行 性能 作业 调优 执行
2.9 MB

Spark性能优化指南——高级篇
tech.meituan.com/spark_tuning_pro.html
美团技术团队
李雪蕤 ·2016-05-12 14:47
前言
继基础篇讲解了每个Spark开发人员都必须熟知的开发调优与资源调优之后,本文作为
《Spark性能优化指南》的高级篇,将深入分析数据倾斜调优与shuffle调优,以解决更加棘
手的性能问题。
数据倾斜调优
调优概述
有的时候,我们可能会遇到大数据计算中一个最棘手的问题——数据倾斜,此时Spark作业的
性能会比期望差很多。数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问
题,以保证Spark作业的性能。
数据倾斜发生时的现象
绝大多数task执行得都非常快,但个别task执行极慢。比如,总共有1000个task,997
个task都在1分钟之内执行完了,但是剩余两三个task却要一两个小时。这种情况很常
见。
原本能够正常执行的Spark作业,某天突然报出OOM(内存溢出)异常,观察异常
栈,是我们写的业务代码造成的。这种情况比较少见。
数据倾斜发生的原理
数据倾斜的原理很简单:在进行shuffle的时候,必须将各个节点上相同的key拉取到某个节
点上的一个task来进行处理,比如按照key进行聚合或join等操作。此时如果某个key对应的
数据量特别大的话,就会发生数据倾斜。比如大部分key对应10条数据,但是个别key却对应
了100万条数据,那么大部分task可能就只会分配到10条数据,然后1秒钟就运行完了;但是
个别task可能分配到了100万数据,要运行一两个小时。因此,整个Spark作业的运行进度是
由运行时间最长的那个task决定的。
因此出现数据倾斜的时候,Spark作业看起来会运行得非常缓慢,甚至可能因为某个task处理
的数据量过大导致内存溢出。
下图就是一个很清晰的例子:hello这个key,在三个节点上对应了总共7条数据,这些数据都
会被拉取到同一个task中进行处理;而world和you这两个key分别才对应1条数据,所以另外
两个task只要分别处理1条数据即可。此时第一个task的运行时间可能是另外两个task的7
1/22
倍,而整个stage的运行速度也由运行最慢的那个task所决定。


数据/task/Spark/倾斜/key/运行/性能/作业/调优/执行/ 数据/task/Spark/倾斜/key/运行/性能/作业/调优/执行/
-1 条回复
登录 后才能参与评论
-->