![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
spark
博闻强识plus
好学近乎知,力行近乎仁,知耻近乎勇
展开
-
Spark性能调优之shuffle原理
shuffle原理概述:哪些情况下,spark会发生shuffle?spark中,以下几个算子会发生shuffle: groupByKey、reduceByKey、countByKey、join 等等什么是shuffle?groupByKey 就是把分散在集群上各个节点上的同一个key的数据,对应的values,集中到集群中同一个节点上。更准确的说,是集中到一个节点的一个executor的...原创 2019-07-01 22:53:40 · 817 阅读 · 0 评论 -
Spark调优之Shuffle调优 调节map端内存缓冲和reduce端内存占比
map端内存缓冲: spark.shuffle.file.buffer (map端内存缓冲,默认32kb)reduce端内存占比: spark.shuffle.memoryFraction (reduce端内存占比,默认0.2,20%)理论基础和问题背景:首先需要声明的是,这两个参数会被认为是调节shuffle的不二选择,但事实是调节这两个参数会对shuffle调优有效果,但并不是决定性的。...原创 2019-07-07 10:05:21 · 830 阅读 · 0 评论 -
Spark性能调优之JVM调优 降低cache操作的内存占比 spark.storage.memoryFraction
理论基础Spark就是用scala开发的,scala是运行在java虚拟机(JVM)上的,所以Spark也是运行在JVM上,而且Spark的scala代码中也调用了很多java api。这个理论基础很重要! 下面介绍通过调节JVM调节来优化Spark性能。 问题背景JVM中,每次存放创建的对象时,都是先放入Eden区域和其中一个survivor区域;另一个survivor区域是空...原创 2019-06-30 16:41:20 · 6226 阅读 · 1 评论 -
Spark性能调优之调节数据本地化等待时长 spark.locality.wait
我们写的spark作业称为application;一个application有多个job(一个action比如:collect操作触发一个job);每个job在发生shuffle(比如:reduceByKey)时,就会被拆成一个stage;每个stage被拆为多个task,task被分配到executor上执行,一个task会有一个线程去执行,一个task处理一小片数据。原创 2019-06-29 20:23:49 · 2712 阅读 · 0 评论 -
Spark调优之Shuffle调优 合并map端输出文件
解决方法:SparkConf conf = new SparkConf ().set("spark.shuffle.consolidateFiles", "true");开启shuffle map端输出文件合并机制。默认情况下,不开启。不开启的话,会发生如下图及描述的严重情况:map端输出大量文件,严重影响性能。未开启map端输出文件合并机制的shuffle作业:下图的前置条件:每个ex...原创 2019-07-05 00:26:57 · 1258 阅读 · 0 评论 -
Spark性能调优之Kryo序列化
什么是Kryo序列化?Kryo序列化是Saprk支持的一种序列化机制,用来序列化类。在Spark作业中,需要你手动设置。Kryo序列化机制应用常场景:1.持久化RDD时进行序列化(比如:内存持久化 + 序列化。 详见笔者文章spark性能调优之RDD持久化) 每个executor分配了多个task,每个task对应有个partition,在将每个RDD partition序列化成一个大的字节...原创 2019-06-29 08:07:57 · 895 阅读 · 0 评论 -
Spark性能调优之Broadcast广播大变量
Broadcast广播大变量背景:spark作业中引用了外部变量时,spark会给每个task拷贝一份变量副本。那么,这会有什么缺点?又会对性能产生怎么用恶劣的影响呢?举例说明:假如有一个外部变量,大小是1M,被spark作业引用。Spark作业设置有500个task。首先,saprk会拷贝500份副本到task(如下图),而拷贝是通过网络传输的。共计就有500M全部通过网络传输,造成很大的...原创 2019-06-27 21:15:45 · 2678 阅读 · 0 评论 -
Spark性能调优之RDD持久化
RDD持久化在同一个spark作业中,如果有某个RDD被复用,那么该RDD就需要持久化。为什么要持久化RDD呢?如下图:如果RDD3到RDD4的计算完成后;下面要开始RDD3到RDD5的运算时,如果之前RDD3没做持久化,那么从RDD1到RDD3的运算又会再重复执行,浪费资源,浪费时间。如果对RDD3做了持久化,那么RDD3到RDD5时直接运算。RDD持久化分为:内存持久化内存持...原创 2019-06-27 21:10:41 · 478 阅读 · 0 评论 -
Spark性能调优之调节task并行度
Spark并行度是什么?我们写的spark作业就称为application;一个application有多个job(一个action比如:collect操作触发一个job);每个job在发生shuffle(比如:reduceByKey)时,就会被拆成一个stage;每个stage被拆为多个task,task被分配到executor上执行,一个task会有一个线程去执行,一个task处理一小...原创 2019-06-27 21:04:44 · 2671 阅读 · 1 评论 -
Spark性能调优之分配资源
分配资源分配资源优化Spark作业问题来了?怎么分配资源? 哪些资源会提高哪块性能?1.增加executor:2.增加每个executor的cpu core:3.增大每个executor的memory内存:结论分配资源优化Spark作业分配更多的资源才是性能调优的王道。 在写完一个spark作业后,要进行性能调优的时候,第一件事就是调配更多的资源;如果已经分配到你能力范围内的资源顶端后,公司无...原创 2019-06-26 21:24:54 · 731 阅读 · 0 评论 -
Spark调优之Shuffle调优 调节HashShuffleManager与SortShuffleManager
简述Shuffle Manager首先声明一点,笔者之前写的spark shuffle调优,基于的Shuffle Manager是HashShuffleManager。而Spark1.2.x以后,HashShuffleManager不再是Spark默认的Shuffle Manager。Spark1.2.x以后,Spark默认的Shuffle Manager是SortShuffleManager...原创 2019-07-07 13:07:55 · 443 阅读 · 0 评论