
Spark
文章平均质量分 60
Winner941112
这个作者很懒,什么都没留下…
展开
-
Spark优化(一):避免重复RDD
避免创建重复的RDD通常来说,我们在开发一个Spark作业时,首先是基于某个数据源(比如Hive表或HDFS文件)创建一个初始的RDD;接着对这个RDD执行某个算子操作,然后得到下一个RDD,以此类推,循环往复,直到计算出最终我们需要的结果。 在这个过程中,多个RDD会通过不同的算子操作(比如map、reduce等)串起来,这个“RDD串”,就是RDD lineage,也就是“RDD...转载 2018-09-29 16:26:25 · 2494 阅读 · 0 评论 -
Spark优化(十):资源参数调优
在开发完Spark作业之后,就该为作业配置合适的资源了。Spark的资源参数,基本都可以在spark-submit命令中作为参数设置。很多Spark初学者通常不知道该设置哪些必要的参数以及如何设置这些参数,最后就只能胡乱设置,甚至压根儿不设置。 资源参数设置的不合理,可能会导致没有充分利用集群资源,作业运行会极其缓慢;或者设置的资源过大,队列没有足够的资源来提供,进而导致各种异常。 ...转载 2018-09-30 16:03:34 · 374 阅读 · 0 评论 -
Spark优化(九):优化数据结构
优化数据结构Java中,有三种类型比较耗费内存: 对象,每个Java对象都有对象头、引用等额外的信息,因此比较占用内存空间。 字符串,每个字符串内部都有一个字符数组以及长度等额外信息。 集合类型,比如HashMap、LinkedList等,因为集合类型内部通常会使用一些内部类来封装集合元素,比如Map.Entry。 因此Spark官方建议,在Spark...转载 2018-09-30 14:31:14 · 328 阅读 · 0 评论 -
Spark优化(八):使用Kryo优化序列化性能
使用Kryo优化序列化性能 在Spark中,主要有三个地方涉及到了序列化: 在算子函数中使用到外部变量时,该变量会被序列化后进行网络传输(见“Spark优化(七):广播大变量”中的讲解)。 将自定义的类型作为RDD的泛型类型时(比如JavaRDD、Student是自定义类型),所有自定义类型对象,都会进行序列化。因此这种情况下,也要求自定义的类必须实现Serializ...转载 2018-09-30 13:58:23 · 718 阅读 · 0 评论 -
Spark优化(七):广播大变量
广播大变量有时在开发过程中,会遇到需要在算子函数中使用外部变量的场景(尤其是大变量,比如100M以上的大集合),那么此时就应该使用Spark的广播(Broadcast)功能来提升性能。在算子函数中使用到外部变量时,默认情况下,Spark会将该变量复制多个副本,通过网络传输到task中,此时每个task都有一个变量副本。如果变量本身比较大的话(比如100M,甚至1G),那么大量的变量副本在...转载 2018-09-30 13:44:46 · 675 阅读 · 0 评论 -
Spark优化(六):使用高性能的算子
除了shuffle相关的算子有优化原则之外,其它的算子也都有着相应的优化原则: 使用reduceByKey/aggregateByKey替代groupByKey。 详情见“Spark优化(五):使用map-side预聚合的shuffle操作”。 使用mapPartitions替代普通map。 mapPartitions类的算子,一次函数调用会处理一个partition...转载 2018-09-29 17:29:33 · 1574 阅读 · 0 评论 -
Spark优化(五):使用map-side预聚合的shuffle操作
使用map-side预聚合的shuffle操作如果因为业务需要,一定要使用shuffle操作,无法用map类的算子来替代,那么尽量使用可以map-side预聚合的算子。所谓的map-side预聚合,说的是在每个节点本地对相同的key进行一次聚合操作,类似于MapReduce中的本地combiner。 map-side预聚合之后,每个节点本地就只会有一条相同的key,因为多条相同...转载 2018-09-29 17:18:43 · 3370 阅读 · 0 评论 -
Spark优化(四):尽量避免使用shuffle类算子
尽量避免使用shuffle类算子如果有可能的话,要尽量避免使用shuffle类算子。因为Spark作业运行过程中,最消耗性能的地方就是shuffle过程。shuffle过程,简单来说,就是将分布在集群中多个节点上的同一个key拉取到同一个节点上,进行聚合或join等操作。比如reduceByKey、join等算子,都会触发shuffle操作。shuffle过程中,各个节点上的相同key...转载 2018-09-29 16:53:14 · 4320 阅读 · 0 评论 -
Spark优化(三):对多次使用的RDD进行持久化
对多次使用的RDD进行持久化当你在Spark代码中多次对一个RDD做了算子操作后,恭喜,你已经实现Spark作业第一步的优化了,也就是尽可能复用RDD。此时就该在这个基础之上,进行第二步优化了,也就是要保证对一个RDD执行多次算子操作时,这个RDD本身仅仅被计算一次。Spark中对于一个RDD执行多次算子的默认原理是这样的:每次你对一个RDD执行一个算子操作时,都会重新从源头处计算一遍...转载 2018-09-29 16:38:34 · 1915 阅读 · 0 评论 -
Spark优化(二):复用RDD
尽可能复用同一个RDD除了要避免在开发过程中对一份完全相同的数据创建多个RDD之外,在对不同的数据执行算子操作时还要尽可能地复用一个RDD。 比如说,有一个RDD的数据格式是key-value类型的,另一个是单value类型的,这两个RDD的value数据是完全一样的,那么此时我们可以只使用key-value类型的那个RDD,因为其中已经包含了另一个的数据。 对于类似这种多个R...转载 2018-09-29 16:29:20 · 1050 阅读 · 0 评论 -
Spark性能优化指南——高级篇
数据倾斜调优调优概述有的时候,我们可能会遇到大数据计算中一个最棘手的问题——数据倾斜,此时Spark作业的性能会比期望差很多。数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问题,以保证Spark作业的性能。数据倾斜发生时的现象绝大多数task执行得都非常快,但个别task执行极慢。比如,总共有1000个task,997个task都在1分钟之内执行完了,但是剩余两三个tas...转载 2018-11-10 12:09:46 · 370 阅读 · 0 评论