Spark性能优化(2)
来源:互联网 发布:java开发培训费用 编辑:程序博客网 时间:2024/05/08 19:44
一:Task性能优化
1. 慢任务的性能优化:可以考虑减少每个Partition处理的数据量,同时建议开启任务推测spark.speculation可以进行任务推测。最快完成的任务就会被采纳
慢任务出现的原因?任务倾斜,硬件故障。因为处理逻辑一样的话,时间差很多那么硬件就可能出现故障。Driver上有一个定时器不断的查看有没有慢任务。
2. 尽量减少Shuffle,例如我们要尽量减少groupByKey的操作,因为groupByKey会要求通过网络拷贝(Shuffle)所有的数据,优先考虑使用reduceByKey。因为reduceByKey会首先reduce locality,再例如在进行join操作的时候,形如:(k1,v1)join(k1,v2) => (k1,v3),此时就可以进行pipeline,但是(o1)join(o2) => (o3),此时就会产生Shuffle操作;
3. Repartition:分片的个数由小变大,增加Task数量的时候可以考虑使用,从而更加充分使用计算资源;
Coalesce:整理Partition碎片;
二:数据倾斜:一般发生在Shuffle
1. 某几个partition数据量特别大
导致后面的Stage无法执行,整个作业就会消耗特别多的时间。而Stage内部是线性执行的,Stage内部的Task是并行执行的,Stage中的Task没有执行完的话下一个Stage不能执行。
如何解决?
1) 自定义分片算法:定义更加合理的Key或者说自定义Partitioner。
2) 可以考虑使用ByteBuffer来存储Block,最大的存储数据为2G,如果超过就会报异常。
2. 某几台机器集中处理数据。
三:网络性能优化
1. 可以考虑Shuffle的数据放在tachyon中带来更好的数据本地性,减少网络的Shuffle。
2. 优先采用Nettry的方式进行网络通信。
3. 广播:例如进行Join操作的时候采用Broadcast可以达到完全的数据本地性的情况下进行Join操作。
4. mapPartitions中的函数会直接作用于整个Partition(一次!!),
/** * Return a new RDD by applying a function to each partition of this RDD. * * `preservesPartitioning` indicates whether the input function preserves the partitioner, which * should be `false` unless this is a pair RDD and the input function doesn't modify the keys. */def mapPartitions[U: ClassTag](
5. 优先考虑PROCESS_LOCAL(Spark默认情况下也是这样做的),所以你更应该考虑使用Tachyon。6. 如果要访问HBase或者Canssandra,务必保证数据处理发生在数据所在的机器上。
- Spark性能优化(2)
- Spark性能优化2
- Spark性能优化(1)
- Spark性能优化(1)
- Spark性能优化(3)
- Spark SQL性能优化
- Spark应用性能优化
- spark性能优化1
- spark的性能优化
- Spark性能优化总结
- Spark性能优化总结
- Spark性能优化之一
- spark性能优化一
- spark性能优化二
- spark性能优化三
- spark性能优化四
- spark性能优化八
- Spark性能优化
- Linux中netstat命令详解
- WEB前端开发有哪些技能需要学习?
- jQuery-EasyUI validatebox+正则表达式实现验证
- install Zlib for linux
- OpenGL入门学习
- Spark性能优化(2)
- Android Support 23.2 BottomSheetBehavior的使用
- Oracle expdp/impdp 用法例子 详解 举例 例子 他的这篇文章没有办法写出来 要这么改
- cpu信息
- Xcode6中如何使用自定义的类模板
- 企业在什么情况需要部署CRM系统?
- 你百度不到的android坑 imageview.setimageDrawable和setbackgroundDrawable
- CSS3鼠标滑过渐变颜色旋转图标特效
- [Android] ListView 滚回顶部