Spark 调优之数据倾斜】的更多相关文章

[数据倾斜及调优概述] 大数据分布式计算中一个常见的棘手问题——数据倾斜: 在进行shuffle的时候,必须将各个节点上相同的key拉取到某个节点上的一个task来进行处理,比如按照key进行聚合或join等操作.此时如果某个key对应的数据量特别大的话,就会发生数据倾斜.比如大部分key对应10条数据,但是个别key却对应了百万条数据,那么大部分task可能就只会分配到10条数据,然后1秒钟就运行完了:但是个别task可能分配到了百万数据,要运行一两个小时.木桶原理,整个作业的运行进度是由运行…
数据倾斜 为什么会数据倾斜 spark 中的数据倾斜并不是说原始数据存在倾斜,原始数据都是一个一个的 block,大小都一样,不存在数据倾斜: 而是指 shuffle 过程中产生的数据倾斜,由于不同的 key 对应的数据量不同导致不同 task 处理的数据量不同 注意:数据倾斜与数据过量不同,数据倾斜是某几个 task 处理的数据量很大,数据过量是所有 task 处理的数据量都很大 数据倾斜的表现 大部分 task 都快速执行完毕,少数 task 执行缓慢,甚至报错 OOM,即使最终运行完毕,也…
什么是数据倾斜? Spark 的计算抽象如下 数据倾斜指的是:并行处理的数据集中,某一部分(如 Spark 或 Kafka 的一个 Partition)的数据显著多于其它部分,从而使得该部分的处理速度成为整个数据集处理的瓶颈. 如果数据倾斜不能解决,其他的优化手段再逆天都白搭,如同短板效应,任务完成的效率不是看最快的task,而是最慢的那一个. 数据倾导致的后果: 数据倾斜直接可能会导致一种情况:Out Of Memory 或者GC 超时. 任务不一定失败,但是极端慢.(但是目前我遇到的数据倾斜…
摘抄自:https://tech.meituan.com/spark-tuning-pro.html 数据倾斜调优 调优概述 有的时候,我们可能会遇到大数据计算中一个最棘手的问题——数据倾斜,此时Spark作业的性能会比期望差很多.数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问题,以保证Spark作业的性能. 数据倾斜发生时的现象 绝大多数task执行得都非常快,但个别task执行极慢.比如,总共有1000个task,997个task都在1分钟之内执行完了,但是剩余两三个task却要…
调优概述 有的时候,我们可能会遇到大数据计算中一个最棘手的问题--数据倾斜,此时Spark作业的性能会比期望差很多.数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问题,以保证Spark作业的性能. 数据倾斜发生时的现象 绝大多数task执行得都非常快,但个别task执行极慢.比如,总共有1000个task,997个task都在1分钟之内执行完了,但是剩余两三个task却要一两个小时.这种情况很常见. 原本能够正常执行的Spark作业,某天突然报出OOM(内存溢出)异常,观察异常栈,是我…
数据倾斜即为数据在节点上分布不均,是常见的优化过程中常见的需要解决的问题.常见的Hive调优的方法:列剪裁.Map Join操作. Group By操作.合并小文件. 一.表现 1.任务进度长度为99%,在任务监控页面中发现只有几个 reduce 子任务未完成: 2.单一 reduce 记录与平均记录数差异过大(大于3倍),最长时长>>平均时长: 3.job数多的,效率低,多次关联后,产生几个jobs,起码半小时以上才跑完: 二.原因 1.key分布不均: 2.业务数据本身问题: 3.建表有问…
数据本地化对于Spark Job性能有着巨大的影响,如果数据以及要计算它的代码是在一起的,那么性能当然会非常高.但是,如果数据和计算它的代码是分开的,那么其中之一必须到另外一方的机器上.移动代码到其匹配的数据节点,会比移动大量数据到代码所在的节点上去,速度要快得多,因为代码比较小.Spark也正是基于这个数据本地化的原则来构建task调度算法. 数据本地化,是指数据离计算它的代码距离有多近,有几种数据本地化级别: 1.PROCESS_LOCAL:数据和计算它的代码在同一个JVM进程中,对应spa…
[业务场景] 在Spark的统计开发过程中,肯定会遇到类似小维表join大业务表的场景,或者需要在算子函数中使用外部变量的场景(尤其是大变量,比如100M以上的大集合),那么此时应该使用Spark的广播(Broadcast)功能来提升性能. [原理说明] 在算子函数中使用到外部变量或两表join时,默认情况下,Spark会将该变量或小维表复制多个副本,通过网络传输到task中,此时每个task都有一个变量副本.如果变量本身比较大的话(比如100M,甚至1G),那么大量的变量副本在网络中传输的性能…
分为几个部分: 开发调优.资源调优.数据倾斜调优.shuffle调优 开发调优: 主要包括这几个方面 RDD lineage设计.算子的合理使用.特殊操作的优化等 避免创建重复的RDD,尽可能复用同一个RDD 一个RDD包含另外一个RDD,对多次使用的RDD进行持久化 内存(序列化),磁盘(序列化) 尽量避免使用shuffle类算子 shuffle过程中,各个节点上的相同key都会先写入本地磁盘文件中,然后其他节点需要通过网络传输拉取各个节点上的磁盘文件中的相同key.而且相同key都拉取到同一…
[使用场景] 两个RDD进行join的时候,如果数据量都比较大,那么此时可以sample看下两个RDD中的key分布情况.如果出现数据倾斜,是因为其中某一个RDD中的少数几个key的数据量过大,而另一个RDD中的所有key都分布比较均匀,此时可以考虑采用本解决方案. [解决方案] 对有数据倾斜那个RDD,使用sample算子采样出一份样本,统计下每个key的数量,看看导致数据倾斜数据量最大的是哪几个key. 然后将这几个key对应的数据从原来的RDD中拆分出来,形成一个单独的RDD,并给每个ke…