- 博客(9)
- 收藏
- 关注
原创 Spark数据倾斜及解决方案
一,数据倾斜现象及原理发生数据倾斜以后的现象:1、你的大部分的task,都执行的特别特别快,刷刷刷,就执行完了(你要用client模式,standalone client,yarn client,本地机器只要一执行spark-submit脚本,就会开始打印log),task175 finished;剩下几个task,执行的特别特别慢,前面的task,一般1s可以执行完5个;最后发现1000个t...
2018-10-09 16:02:27
5087
原创 Spark性能优化七之数据本地化
数据本地化对于Spark Job性能有着巨大的影响。如果数据以及要计算它的代码是在一起的,那么性能当然会非常高。但是,如果数据和计算它的代码是分开的,那么其中之一必须到另外一方的机器上。通常来说,移动代码到其他节点,会比移动数据到代码所在的节点上去,速度要快得多,因为代码比较小。Spark也正是基于这个数据本地化的原则来构建task调度算法的。数据本地化,指的是,数据离计算它的代码有多近。基于数...
2018-10-09 15:52:13
238
原创 Spark性能优化六之广播共享数据
如果你的算子函数中,使用到了特别大的数据,那么,这个时候,推荐将该数据进行广播。这样的话,就不至于将一个大数据拷贝到每一个task上去。而是给每个节点拷贝一份,然后节点上的task共享该数据。这样的话,就可以减少大数据在节点上的内存消耗。并且可以减少数据到节点的网络传输消耗。...
2018-10-09 15:50:12
200
原创 Spark性能优化五之提高并行度
设置合理的并行度,来充分地利用集群的资源使用spark.default.parallelism参数,来设置统一的并行度。Spark官方的推荐是,给集群中的每个cpu core设置2~3个task。比如说,spark-submit设置了executor数量是10个,每个executor要求分配2个core,那么application总共会有20个core。此时可以设置new SparkConf(...
2018-10-09 15:48:03
714
原创 Spark性能优化四之rdd持久化及checkpoint
如果程序中,对某一个RDD,基于它进行了多次transformation或者action操作。那么就非常有必要对其进行持久化操作(cache()或persist()),以避免对一个RDD反复进行计算。除了对多次使用的RDD进行持久化操作之外,还可以进一步优化其性能。因为很有可能,RDD的数据是持久化到内存,或者磁盘中的。那么,此时,如果内存大小不是特别充足,完全可以使用序列化的持久化级别,比如M...
2018-10-09 15:46:14
208
原创 Spark性能优化三之采用kryo序列化类库
Spark自身默认会在一些地方对数据进行序列化,比如Shuffle。还有就是,如果我们的算子函数使用到了外部的数据,比如我们在外部定义了一个封装了应用所有配置的对象,自定义了一个MyConfiguration对象,里面包含了100m的数据。然后,在算子函数里面,使用到了这个外部的大对象,那么也需要让其可序列化。Spark提供了两种序列化机制,默认使用第一种:1、Java序列化机制:只要你的类...
2018-10-09 15:44:40
277
原创 Spark性能优化二之Java虚拟机垃圾回收调优
GC对性能的影响:=调节excutor内存比例=================调节executor内存比例,默认此参数值是0.6,降低调为0.5:使用new SparkConf().set(“spark.storage.memoryFraction”, “0.5”)即可,其实啊,根据经验来看,对于垃圾回收的调优,尽量就是说,调节executor内存的比例就可以了。因为jvm的调优是非常复杂...
2018-10-09 15:43:30
277
原创 Spark性能优化一之shuffle性能优化
shuffle操作是spark中唯一最最消耗性能的地方,会产生大量的磁盘IO(因为map task会将数据先写到bucket缓存中,然后溢写到磁盘文件中去,同时如果reduce task的聚合内存不大时也会溢写到磁盘),网络IO(因为会导致大量的数据在不同的节点之间进行传输),内存消耗(map task的bucket缓存,reduce task的拉取缓存,reduce task的聚合内存)red...
2018-10-09 15:39:04
606
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅