2015-10-07 158 views
5

火花流中的批次是RDD的批次。假设批次的3个RDD。RDD分区火花Streaming

另外spark文档说,一个块每隔200ms被reciever创建,分区被分配给块。

在1秒内说我有一批3个RDD,如果考虑200毫秒,则有5个块。

那么RDD如何在工作节点之间进行分区,是将要分区的单个RDD还是完整批次。

我可能采取了错误的方式。请指导我

回答

13

一个流式批次对应一个RDD。该RDD将有n个分区,其中n =批间隔/块间隔。 假设您拥有标准的200ms块间隔和2秒的批处理间隔,那么您将拥有10个分区。 模块由接收器创建,每个接收器分配在主机中。 因此,这10个分区位于单个节点中,并被复制到第二个节点。

当提交RDD进行处理时,运行该任务的主机将从该主机读取数据。在同一节点上执行的任务将具有“NODE_LOCAL”位置,而在其他节点上执行的任务将具有“任意”位置,并且需要更长的时间。

因此,为了改进并行处理,建议分配多个接收器并使用联合来创建单个DStream以供进一步处理。这样数据将被多个节点并行消耗和处理。

+0

嘿谢谢@maasg – dexter

+0

谢谢@maasg。只是为了确认,如果我们有多个接收器,那么我们有多个DStream,每个DStream对应一个RDD。所以,当我们结合多个Dstream时,我们得到一个DStream。该DStream包含多个RDD或单个RDD? –

+0

@ DineshSachdev108 Bu定义union()将“返回一个新的DStream,其中包含源DStream和其他流中元素的联合” 这意味着结果也将是一个dStream。根据定义,“DStream表示为RDD序列 这意味着结果将包含多个RDD,具体取决于您的接收器接收多少个批次。 – bigdatamann

0

这是仍然适用于更新版本的火花?

我读了an article,其中火花上有多个接收器的场景已经过时,而新的直接kafka api(createDirectStream)将为您处理几乎所有的事情。