0

最近我一直在Spark Streaming上进行性能测试。我在6个从站之一上运行了一个接收器,并向集群提交了一个简单的字数统计应用程序(实际上,我知道这种配置在实践中并不合适,只是一个简单的测试)。我分析了调度日志,发现近88%任务被安排到接收器运行的节点,并且局部总是处于PROCESS_LOCAL状态,并且CPU利用率非常高。 Spark Streaming为什么不在整个集群中分布数据并充分利用集群?我读过官方指南,并没有详细解释,特别是在Spark Streaming中。如果任务位于CPU繁忙的节点上,它是否会将流数据复制到具有空闲CPU的另一个节点并启动新任务?如果是这样,我们如何解释前一种情况?Spark Streaming中的数据区域

回答

1

当您在6个节点之一上运行流receiver时,将在此节点上处理所有接收到的数据(即数据区域)。

默认情况下,数据不会分布在其他节点上。如果需要进一步的处理之前的输入流被重新分区(在集群平衡),则可以使用

inputStream.repartition(<number of partitions>)

这进一步处理前分配跨集群中机器的指定数量的数据的接收到的批次。

可以星火文档
https://spark.apache.org/docs/latest/streaming-programming-guide.html#performance-tuning

+0

我做了重新分区测试和流的延迟似乎未改良,比以前更大的阅读更多关于并行的水平。实验在两台物理服务器上托管的6个节点的虚拟集群中完成。 –

+0

如何启动多个接收器?群集中的CPU利用率是否已更改?不是它应该在所有节点之间更加平衡。 – vanekjar

+0

重新分区后,虚拟群集中的CPU利用率发生了变化。它似乎在所有节点之间更加平衡,但延迟并没有得到显着改善。我不确定是什么原因造成的,重新分配会导致接收器运行的节点或更多网络传输的负载增加? –