SparkStreaming本地化策略性能调优与使用场景分析

1.背景介绍:平台使用的华为FI C203的版本,通过SparkStreaming消费kafka数据后,进行算法处理入库。其中在算法部分耗时为4秒,每个批的数据量在30MB左右。执行算法部分的算子分区数据从50调大至150,发现算法部分时间开销仍然在4秒左右,并未提高。

2.调优手段:

spark.locality.wait

spark.locality.wart.process

spark.locality.wait.node

spark.locality.wait.rack

的默认3秒时间改为0秒。

3.原因解释

以上参数是调整会影响到数据本地化策略的。本地化策略有5种。

1.PROCESS_LOCAL:进程本地化,性能最好(相对数据量较大时)。

2.ODE_LOCAL:节点本地化。代码和数据在同一个节点中。

3.NO_PREF:数据从哪里获取都一样,比如从数据库中获取数据。

4.RACK_LOCAL:数据和task在一个机架的两个节点上,数据需要通过网络在节点之间进行传输。

5.ANY:数据和task可能在集群中的任何地方,而且不在一个机架中,性能最差(相对数据量较大时)。

将时间由3秒改为0秒时,spark来不及分析用哪种本地化策略,就已经被降级了(1->5,数字越大,级别越低),降级后的现象是数据shuffle到别的节点上进行算法处理,未降级的特点是算法随着数据走,数据并大部分集中在某一个或两个物理节点,由于cpu不够,反而降低算法处理的整体时间开销。然而sparkStreaming抓取的数据并不大,降级后数据跟随算法走,通过shuffle后,算法与数据分散到不同物理节点上,由于数据量少,网络传输快,cpu资源充足,反而效率更高。调整后算法的算子时间开销不到1秒。

4.总结

以上调优手段看使用场景使用,数据量小时时间调小;数据量大的,尽量让算法跟随数据走。

原文地址:https://www.cnblogs.com/runnerjack/p/12107473.html