王家林谈Spark性能优化第二季!(DT大数据梦工厂)

内容:

1、Task性能优化;

2、数据倾斜性能优化;

3、网络性能优化;

==========Task性能优化============

1、慢任务的性能优化:可以考虑每个partition处理的数据量,同时建议开启spark.speculation(任务推测执行模式,检索partition任务执行的话,可能就几个任务比较慢,这样减少可能每个partition的任务都减少),就是任务还没完成的情况下,开启相同的任务,看谁先完成就采纳谁的,

一般情况下,出现慢任务的原因:数据倾斜、硬件故障;

2、尽量减少Shuffle,例如我们要尽量减少groupByKey的操作,因为groupByKey会要求通过网络拷贝所有的数据,优先考虑使用reduceByKey,因为reduceByKey首先会reduce locally,再例如在进行jion操作的时候,形如(K1,V1)和(K1,V2)=>(K1,V3),此时就可以在pipeline,但是(O1)和(O2)=>(O3),此时就会产生 Shuffle操作;

3、Repartition,增加Task数量的时候可以考虑使用,从而更加充分的使用计算资源,但是会产生Shuffle,分片个数从小变大,

但是Coalesce可以帮助整理partition碎片,分片个数从大变小;

4、

额外:钨丝计划:

改变了JVM的局限性

一体化、多元化实时处理

==========数据倾斜性能优化============

某一个或者几个partition的数据量特别大、某台机器或者某几台机器集中处理某些任务,这个时候就会产生计算的瓶颈

Spark划分很多Stage,后面的Stage要等到前面的Stage执行完才能执行,而Stage内部有N多Task并行执行的,如果里面有一个Task没有执行完,则后面的Stage没法执行,就会导致整个作业需要等待很长很长时间

1、定义合理的Key(或者说自定义partitioner);

2、可以考虑使用getBuffer来存储Block数据,最大的存储数据为2G,如果超过这个大小,会报异常;

==========网络============

1、Tachyon(新的名称:Alluxio)隐形帮助解决了网络问题,就是数据要尽量保持本地化,可以考虑Shuffle的数据放在Tachyon中带来更好的数据本地性,减少网络的Shuffle;

2、优先采用Netty的方式进行网络通信;

3、广播:例如进行jion操作的时候,采用broadcast可以极大的减少Shuffle,达到完全的数据的本地性的情况下进行jion操作;

4、mapPartitions:里面的函数会直接作用于整个partition(一次!!!)

spacer.gif

5、最优先考虑使用PROCESS_LOCAL(Spark默认情况下这个情况下也是这么做的),所以更应该考虑使用Tackyon;

6、如果要访问HBase或者Canssandra,务必保证数据处理发生在数据所在的机器上;

下一节课开始动手进行性能优化的处理。

王家林老师名片:

中国Spark第一人

新浪微博:http://weibo.com/ilovepains

微信公众号:DT_Spark

博客:http://blog.sina.com.cn/ilovepains

手机:18610086859

QQ:1740415547

邮箱:[email protected]


本文出自 “一枝花傲寒” 博客,谢绝转载!

你可能感兴趣的:(spark,性能优化,王家林谈)