2016-03-02 159 views
0

背景执行顺序流

我有一个火花流应用,从室壁运动读取数据 - >不就可以了窗口 - >将数据保存到外部系统(通过做foreachRDD )。

最近我观察到,我的窗户被foreachRDD一个接一个地占用。这意味着如果我的应用程序中有突然突发的数据(因此窗口的foreachRDD需要很长时间),那么窗口将在处理之前堆叠在队列中(而群集中的大多数计算机处于空闲状态)。

问题

这是一个语义火花流的是窗口正在处理一个接一个?如果是的话,是否有任何方法可以在spark中并行执行“窗口化”操作,以便窗口同时被foreachRDD使用?

回答

0

找出你的kinesis流有多少分片,并通过调用KinesisUtils Scala类中定义的createStream来创建许多接收者。

blog post from Amazon解释得很好....

每个输入DSTREAM与接收器相关联的,在这种情况下 也有KCL工人。理解这一点的最好方法是参考 在KinesisUtils Scala类中定义的方法createStream。

每次调用KinesisUtils.createStream时,都会在Spark执行器上实例化Spark Streaming 接收器和KCL工作进程。第一次创建KCL工作者 时,它连接到Amazon Kinesis流, 为其管理的每个分片实例化一个记录处理器。对于每次后续呼叫 ,都将创建一个新的KCL工作人员,并在所有可用的KCL工作人员之间重新平衡处理器的记录 。 KCL 工作人员从碎片中提取数据,并将它们传送到接收器 ,然后将它们存储到关联的DStream中。