Spark一些优化

本文探讨了Spark优化的两大方面:数据本地化和提高Job执行并行度。针对数据本地化,讲解了不同本地化级别、等待时长的调节以及优化策略。对于Job并行度,区分了Spark Core与Streaming中的Job,强调了`spark.streaming.concurrentJobs`参数的作用。同时,介绍了反压机制,包括参数配置与实施过程,以确保数据处理的效率和稳定性。
摘要由CSDN通过智能技术生成

一、优化1:数据本地化

一、进程本地化级别

1.PROCESS_LOCAL:进程本地化

代码和数据在同一个进程中,也就是在同一个executor中;计算数据的task由executor执行,数据在executor的BlockManager中;性能最好.

2.NODE_LOCAL:节点本地化

代码和数据在同一个节点中;比如说,数据作为一个HDFS block块,就在节点上,而task在节点上某个executor中运行;或者是,数据和task在一个节点上的不同executor中;数据需要在进程间进行传输

3.NO_PREF

对于task来说,数据从哪里获取都一样,没有好坏之分

4.RACK_LOCAL:机架本地化

数据和task在一个机架的两个节点上;数据需要通过网络在节点之间进行传输

5.ANY

数据和task可能在集群中的任何地方,而且不在一个机架中,性能最差

 

二、数据本地化等待时长

spark.locality.wait,默认是3s

降级!!!!!!! 次一点的还不行,再等待3秒。
再降级!!!等待。最后不行,就用最坏的!!!!

 

三、何时需要调节

怎么调?

看运行日志!
看WebUI

我们什么时候要调节这个参数?怎么调节!

观察日志,spark作业的运行日志,推荐大家在测试的时候,先用client模式,在本地就直接可以看到比较全的日志。
日志里面会显示,starting task。。。,PROCESS LOCAL、NODE LOCAL

观察大部分task的数据本地化级别
如果大多都是PROCESS_LOCAL,那就不用调节了

如果是发现,好多的级别都是NODE_LOCAL、ANY,那么最好就去调节一下数据本地化的等待时长

调节完,应该是要反复调节,每次调节完以后,再来运行,观察日志
看看大部分的task的本地化级别有没有提升;看看,整个spark作业的运行时间有没有缩短。

注意

别本末倒置,本地化级别倒是提升了,
但是因为大量的等待时长,spark作业的运行时间反而增加了,那就还是不要调节了。

四、怎么调节?

spark.locality.wait,默认是3s;6s,10s

默认情况下,下面3个的等待时长,都是跟上面那个是一样的,都是3s

spark.locality.wait.process
spark.locality.wait.node
spark.locality.wait.rack

new SparkConf()
.set(“spark.locality.wait”, “10”)

 

四、原理浅析

Spark在Driver上,对Application的每一个stage的task进行分配之前,都会计算出每个task要计算的是哪个分片数据,RDD的某个partion;
Spark的task分配算法,优先。会希望每个task正好分配到它要计算的数据所在的节点,这样的话,就不用在网络上传输数据

有时,事与愿违,ta

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值