Spark性能优化第二季-Task、数据倾斜及网络性能优化
2016-03-20 14:35
609 查看
一:Task性能优化
1、慢任务的性能优化:可以考虑减少每个Partition处理的数据量,同时建议开启spark.speculation(在/conf目录下查找)
2、尽量减少Shuffle,例如,要尽量减少groupByKey的操作,因为groupByKey会要求通过网络copy所有的数据(这就是所谓的shuffle)。优先考虑使用reduceByKey。因为会首先reduce locally(可以减少数倍的数据量);再次,在进行join操作的时候,形如(K1,V1)join(K1,V2)=>(K1,V3),此时就可以进行pileline,但是(O1)join (O2) => (O3),此时就会产生Shuffle操作,因为不能保证数据在同一个node上。
3、Repartition:增加Task数量的时候可以考虑使用,从而更加充分地使用计算资源;
Coalesce:整理Partition碎片;
二:数据倾斜优化方案
1、定义更加合理的Key(或者自定义Partitioner);
2、可以考虑使用ByteBuffer来存储Block(ByteBuffer最大的存储数据为2G,如果超过这个大小会报异常);
三:网络
1、可以考虑Shuffle的数据放在Tachyon中带来更好的数据本地性,减少网络的Shuffle;
2、优先采用Netty的方式进行网络通信;
3、广播:例如进行Join操作的时候采用Broadcast,可以达到完全的数据本地性情况下进行join操作;
4、mapPartitions中的函数会直接作用于整个Partition(一次)
5、最优先考虑是PROCESS_LOCAL(Spark黑夜情况下也是这样做的),所以更应该考虑使用Tachyon;
6、如果要访问HBase或者Canssandra,务必保证数据处理发送在数据所在的机器上;
1、慢任务的性能优化:可以考虑减少每个Partition处理的数据量,同时建议开启spark.speculation(在/conf目录下查找)
2、尽量减少Shuffle,例如,要尽量减少groupByKey的操作,因为groupByKey会要求通过网络copy所有的数据(这就是所谓的shuffle)。优先考虑使用reduceByKey。因为会首先reduce locally(可以减少数倍的数据量);再次,在进行join操作的时候,形如(K1,V1)join(K1,V2)=>(K1,V3),此时就可以进行pileline,但是(O1)join (O2) => (O3),此时就会产生Shuffle操作,因为不能保证数据在同一个node上。
3、Repartition:增加Task数量的时候可以考虑使用,从而更加充分地使用计算资源;
Coalesce:整理Partition碎片;
二:数据倾斜优化方案
1、定义更加合理的Key(或者自定义Partitioner);
2、可以考虑使用ByteBuffer来存储Block(ByteBuffer最大的存储数据为2G,如果超过这个大小会报异常);
三:网络
1、可以考虑Shuffle的数据放在Tachyon中带来更好的数据本地性,减少网络的Shuffle;
2、优先采用Netty的方式进行网络通信;
3、广播:例如进行Join操作的时候采用Broadcast,可以达到完全的数据本地性情况下进行join操作;
4、mapPartitions中的函数会直接作用于整个Partition(一次)
5、最优先考虑是PROCESS_LOCAL(Spark黑夜情况下也是这样做的),所以更应该考虑使用Tachyon;
6、如果要访问HBase或者Canssandra,务必保证数据处理发送在数据所在的机器上;
相关文章推荐
- 网络开发库从libuv说到epoll
- 简单的基于Socket的TCP编程实例
- 深度学习Deep learning
- 为什么深度神经网络难以训练Why are deep neural networks hard to train?
- 神经网络可以拟合任意函数的视觉证明A visual proof that neural nets can compute any function
- POJ 1698 图论之网络流
- J2EE架构之路,好地址:http://www.fengfly.com/plus/view-210104-1.html
- http协议-缓存控制:no-cache/must-revalidate/no-store
- 《MFC网络通信》Part 2 简单TCP通信
- 神经网络可以拟合任意函数的视觉证明A visual proof that neural nets can compute any function
- 4000 基于DES加密的TCP聊天程序
- 计算机网络中一些名词解释(一)
- HttpClient 和 HttpURLConnection 的使用
- H5学习系列之文件读取API--本文转自http://blog.csdn.net/jackfrued/article/details/8967667
- linux 网络源码布局
- C++ 用libcurl库进行http通讯网络编程
- 基础的http协议构成
- TCP三次握手和四次挥手
- HTTP状态码整理
- 一些我推荐的和想上的网络课程(Coursera, edX, Udacity,MIT OCW)