具有RACK_LOCAL局部性级别的Spark流调度延迟

时间:2019-07-09 23:23:16

标签: java apache-spark spark-streaming

随着消息从IBM MQ消耗,调度延迟会增加。

嗨,

我有一个在EMR上运行的Spark Streaming应用程序。该应用程序具有一个定制的接收器,可以从IBM MQ中获取消息,并且它存储数据以转换为RDD并对其进行处理。下面是规格。

  • 火花-2.4.0
  • EMR-5.20
  • Hadoop-Amazon 2.8.5
  • 批处理间隔-尝试了2s和5s

计算非常少,处理批处理的所有消息大约需要0.5秒。

  • XML到JSON的转换。
  • 验证。
  • 推到卡夫卡。

消息量不是很高。每2s批处理最多可发送10条消息,每5s批处理最多可发送25条消息。

1个主节点 2个核心节点

每个具有32G内存,每个执行器2个内核。

  • 执行器内存-4G
  • 驱动器内存-5G

应用运行良好,突然注意到调度延迟不断增加,从而减慢了消息流的处理速度。在进一步分析中,请注意,几乎为所有任务分配的任务具有RACK_LOCAL局部性,这会延迟获取数据以执行任务。我不确定这是什么原因以及如何解决该问题。任何人都可以朝正确的方向前进吗?

enter image description here enter image description here

您会注意到,所有具有PROCESS_LOCAL位置的任务均立即完成,而具有RACK_LOCAL的任务的调度和最终处理则被延迟。任何线索都会有很大帮助。

谢谢。

0 个答案:

没有答案