Spark Streaming中的数据位置

时间:2015-07-21 11:30:46

标签: apache-spark real-time bigdata distributed-computing spark-streaming

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

1 个答案:

答案 0 :(得分:1)

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

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

inputStream.repartition(<number of partitions>)

这会在进一步处理之前将收到的批量数据分布到群集中指定数量的计算机上。

您可以在Spark文档中阅读有关并行度的更多信息 https://spark.apache.org/docs/latest/streaming-programming-guide.html#performance-tuning