我们的情况是:使用AWS Kinesis的Spark流式传输。
如果将Spark master指定为内存为“ local [32] ”,那么Spark可以相当快地使用Kinesis中的数据。
但是如果我们切换到一个拥有1个主服务器和3个工作服务器的集群(在4台独立的机器上),并将master设置为“ spark:// [IP]:[port] ”,那么Spark集群以非常慢的速度消耗数据。该集群有3台工作机器,每台工作机器有1个核心。
我正在尝试加快消耗速度,所以我在每台工作机器上添加更多执行程序,但它没有多大帮助,因为每个执行程序至少需要1个核心(和我的工作人员)机器只有1个核心)。我还读到添加更多 Kinesis shard 数字将有助于扩大规模,但我只想最大化我的阅读能力。
由于“内存”模式可以足够快地消耗,是否可以在每台工作机器上启动多个“Kinesis记录处理器线程”,如下面的图片所示?或者从1核心内的Kinesis开始使用多个线程?
非常感谢。
下面https://spark.apache.org/docs/1.2.0/streaming-kinesis-integration.html
的图片
答案 0 :(得分:0)
事实证明这与集群的资源有关。
对于AWS Kinesis,一个Kinesis流需要一个来自Spark集群的接收器,一个接收器将从Spark工作者获得一个核心。
我将每个worker的核心增加到4个核心,然后执行者有额外的核心来运行作业。