Spark Streaming无法使用非常简单的代码进行扩展

时间:2017-07-13 02:08:18

标签: apache-spark apache-kafka spark-streaming

我有一个非常简单的Spark Streaming代码,可以从Kafka读取并输出到S3文件:

KafkaUtils.createDirectStream(jssc,
                              LocationStrategies.PreferConsistent(),
                              ConsumerStrategies.Subscribe(topics, kafkaParams))
          .map(...)
          .filter(...)
          .map(...)
          .window(Durations.seconds(windowDuration), Durations.seconds(slideDuration))
          .flatMap(...)
          .map(x -> "") // so that it writes empty strings to mimimize disk writing
          .dstream(...)
          .saveAsTextFiles(...);

我在Amazon EMR上测试了这个,m3.xlarge个实例,每个实例有4个vCPU和15GB内存,所有这些都配置了maximizeResourceAllocation,因此他们将使用所有8个YARN核心。批处理间隔,窗口大小和幻灯片持续时间都设置为8秒。下表总结了每种配置的吞吐量:

------------------------------------------------------------------------------------------
| # slaves | # vpus | # YARN cores | # Kafka partitions | maxRatePerPartition | events/s |
------------------------------------------------------------------------------------------
| 2        | 8      | 16           | 64                 | 790                 | 50560    |
------------------------------------------------------------------------------------------
| 4        | 16     | 32           | 64                 | 1570                | 100480   |
------------------------------------------------------------------------------------------
| 8        | 32     | 64           | 64                 | 2850                | 182400   |
------------------------------------------------------------------------------------------
| 16       | 64     | 128          | 128                | 1680                | 215040   |
------------------------------------------------------------------------------------------

正如您所看到的,一切看起来都很好,最多可达8个节点。我为16节点配置将Kafka分区的数量更改为128,以便为每个执行程序分配1个Kafka接收器(重新创建了Kafka主题)。 16个节点的吞吐量仅略高于8个节点的吞吐量。我不知道什么是错的,因为代码不包含改组或重新分区。

0 个答案:

没有答案