【发布时间】:2016-10-17 20:42:19
【问题描述】:
我正在尝试在我的 4 核机器上以本地模式运行有关 Spark 流应用程序处理时间的一些测试。
这是我的代码:
SparkConf sparkConf = new SparkConf().setMaster("local[2]").setAppName("sparkstreaminggetjson");
JavaStreamingContext ssc = new JavaStreamingContext(sparkConf, Durations.seconds(1));
JavaReceiverInputDStream<String> streamData1 = ssc.socketTextStream(args[0], Integer.parseInt(args[1]),
StorageLevels.MEMORY_AND_DISK_SER);
streamData1.print();
我每秒收到 1 条 JSON 消息。 所以,我测试了 4 种不同的场景:
1) setMaster(...local[2]) 和 1 个分区
2) setMaster(...local[*]) 和 1 个分区
3)setMaster(...local[2])和4个分区(使用streamData1.repartition(4))
4) setMaster(...local[*]) 和 4 个分区(使用 streamData1.repartition(4))
当我在 UI 中查看平均处理时间时,我得到的每个场景的平均处理时间如下:
1) 30 毫秒
2) 28 毫秒
3) 72 毫秒
4) 75 毫秒
我的问题是:为什么 1 和 2 以及 3 和 4 的处理时间几乎相同? 我意识到例如从 2 增加到 4 是正常的,因为重新分区是一个随机操作。我不明白的是,例如在 4)中,为什么处理与 3 如此相似?由于我正在提高并行化级别,并且我有更多的内核可以将任务分配到,所以它不应该小得多吗?
希望我没有混淆, 非常感谢您。
【问题讨论】:
-
你的考试时间是多久?你读了多少测试文件?即您是否考虑过配置集群所需的时间?
-
@GameOfThrows,因为我在本地模式下工作,正如我之前所说,没有要配置的集群,只有我电脑的本地核心。我测试了大约两分钟,在这段时间内我读取了 120 个数据点(JSON 消息)。
标签: apache-spark parallel-processing spark-streaming