在一个核心内的 Spark worker 上启动多个处理器线程
start multiple processor threads on Spark worker within one core
我们的情况是:使用 Spark streaming with AWS Kinesis。
如果将内存中的 Spark master 指定为“local[32]”,那么 Spark 可以相当快地从 Kinesis 中消费数据。
但是如果我们切换到一个有 1 个 master 和 3 个 worker 的集群(在 4 个独立的机器上),并将 master 设置为 "spark://[IP]:[port]",那么 Spark 集群正在以非常慢的速度消耗数据。这个集群有3台worker机器,每台worker机器有1个core。
我想加快消费速度,所以我在每台工作机器上添加了更多的执行程序,但这并没有多大帮助,因为每个执行程序都需要 1 个核心至少(我的工作机器只有 1 个核心)。我还阅读了添加更多 Kinesis 分片 数量将有助于扩大规模,但我只想最大化我的读取容量。
由于“内存中”模式可以足够快地消耗,是否可以在每个工作机器上也启动多个“Kinesis 记录处理器线程”,如下图所示?或者在 1 个核心内启动许多线程从 Kinesis 消费?
非常感谢。
下图来自https://spark.apache.org/docs/1.2.0/streaming-kinesis-integration.html
原来是和集群的资源有关
对于 AWS Kinesis,一个 Kinesis 流需要一个来自 Spark 集群的接收器,一个接收器将从 Spark worker 获取一个核心。
我将每个worker的核心增加到4个核心,然后执行者有额外的核心来运行个工作。
我们的情况是:使用 Spark streaming with AWS Kinesis。
如果将内存中的 Spark master 指定为“local[32]”,那么 Spark 可以相当快地从 Kinesis 中消费数据。
但是如果我们切换到一个有 1 个 master 和 3 个 worker 的集群(在 4 个独立的机器上),并将 master 设置为 "spark://[IP]:[port]",那么 Spark 集群正在以非常慢的速度消耗数据。这个集群有3台worker机器,每台worker机器有1个core。
我想加快消费速度,所以我在每台工作机器上添加了更多的执行程序,但这并没有多大帮助,因为每个执行程序都需要 1 个核心至少(我的工作机器只有 1 个核心)。我还阅读了添加更多 Kinesis 分片 数量将有助于扩大规模,但我只想最大化我的读取容量。
由于“内存中”模式可以足够快地消耗,是否可以在每个工作机器上也启动多个“Kinesis 记录处理器线程”,如下图所示?或者在 1 个核心内启动许多线程从 Kinesis 消费?
非常感谢。
下图来自https://spark.apache.org/docs/1.2.0/streaming-kinesis-integration.html
原来是和集群的资源有关
对于 AWS Kinesis,一个 Kinesis 流需要一个来自 Spark 集群的接收器,一个接收器将从 Spark worker 获取一个核心。
我将每个worker的核心增加到4个核心,然后执行者有额外的核心来运行个工作。