2

我们的情况是:将 Spark 流与 AWS Kinesis 结合使用。

如果将 Spark master 指定为“ local[32] ”,则 Spark 可以相当快地使用来自 Kinesis 的数据。

但是如果我们切换到一个有 1 个 master 和 3 个 worker 的集群(在 4 台不同的机器上),并将 master 设置为“ spark://[IP]:[port] ”,那么 Spark 集群消耗数据的速度非常慢速度。该集群有 3 台工作机器,每台工作机器有 1 个核心。

我正在尝试加快消耗速度,因此我在每台工作机器上添加了更多执行程序,但这并没有太大帮助,因为每个执行程序至少需要 1 个核心(而我的工作机器只有 1 个核心)。我还阅读了添加更多Kinesis分片数将有助于扩大规模,但我只想最大化我的读取容量。

由于“内存中”模式可以足够快地消耗,是否也可以在每台工作机器上启动多个“Kinesis 记录处理器线程”,如下图所示?或者在 1 个内核中启动多个线程以从 Kinesis 消耗?

非常感谢。

下图来自https://spark.apache.org/docs/1.2.0/streaming-kinesis-integration.html

图片

4

1 回答 1

0

原来与集群的资源有关。

对于 AWS Kinesis,一个 Kinesis 流需要一个来自 Spark 集群的接收器,而一个接收器将从 Spark 工作器获取一个核心。

我将每个worker的核心增加到4个核心,然后executors有额外的核心来运行作业。

于 2015-06-04T05:27:52.620 回答