Spark性能调优之调节本地时间

main
Oeljeklaus 7 years ago committed by GitHub
parent 98e1ffdcc5
commit 66df44cb65
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -446,4 +446,35 @@ Spark应用fastutil
第三如果外部变量是某种比较大的集合那么可以考虑使用fastutil改写外部变量首先从源头上减少内存的占比通过广播变量进一步减少内存占用
通过kyro序列化类库进一步减少内存占比。
通过kyro序列化类库进一步减少内存占比。
### 性能调优之调节数据本地化等待时间
spark的task分配算法优先会希望每个task正好分配到它要计算的数据所在的节点这样就不用在网络间传输数据。但是一般是事与愿违通常spark还会等待一段时间默认情况下是3秒如果不行就会选择这个比较差的本地化级别比如说将task分配到靠它要计算的数据所在的节点在比较近的一个节点然后进行计算。
如果发生数据传输task会通过其所在节点的BlockManager来获取数据通过一个getRemote方法通过网络传输组件从数据所在的节点的BlockManager中获取数据通过网络传输回task所在的节点进行计算。
最佳情况task和BlockManager直接在一个executor进程内走内存速度最佳;同一机架,不在一个节点,需要网络传输;在一个节点多个executor之间数据传输;不同机架,跨机架之间的网络传输,这种情况对性能的影响非常大。
PROCESS_LOCAL:进程本地化代码和数据在同一进程也就是同一个executor计算的task由executor执行BlockManager中有数据性能最好。
NODE_LOCAL:节点本地化,代码和数据在同一节点,但是数据在不同进程。
RACK_LOCAL:在一个机架上,需要跨节点拉去数据。
NY:跨机架拉去数据。
spark.locality.wait默认是3s。
在什么时候调节数据本地化参数呢?
观察spark作业的运行日志推荐首先使用本地模式在日志中会显示数据本地化级别大多数是PROCESS_LOCAL调节。
如果是其他最好是调节一下数据本地化的等地时长。需要反复调节每次调节完再运行观察日志。看看大部分task的本地化级别有没有提提升看看整个spark作业运行时间有没有缩短。
怎么调节?
spark.locality.wait.process
spark.locality.wait.node
spark.locality.wait.rack
在SparkConf中设置即可

Loading…
Cancel
Save