火花流中的批次是RDD的批次。假设一批3个RDD。
此外,Spark文档说接收器每隔200ms创建一个块,并将分区分配给块。
在1秒钟内说我有3批RDD,如果考虑200毫秒,则有5个区块。
那么RDD如何在工作节点之间进行分区,是将要分区的单个RDD还是完整的批处理。
我可能以错误的方式接受了它。请指导我
答案 0 :(得分:18)
一个流批处理对应一个RDD。该RDD将具有n个分区,其中n =批处理间隔/块间隔。 假设您有200毫秒的标准块间隔和2秒的批处理间隔,那么您将有10个分区。 块由接收器创建,每个接收器在主机中分配。 因此,这10个分区位于单个节点中,并被复制到第二个节点。
提交RDD进行处理时,运行该任务的主机将从该主机读取数据。在同一节点上执行的任务将具有" NODE_LOCAL"局部性,而在其他节点上执行的任务将具有" ANY"地点,将需要更长的时间。
因此,为了改进并行处理,建议分配多个接收器并使用union创建单个DStream以进行进一步处理。这样,数据将被多个节点并行使用和处理。
答案 1 :(得分:2)
这是否仍适用于较新版本的spark?
我阅读了an article,其中火花上有多个接收器的场景已经过时,而新的直接kafka api(createDirectStream
)将为您处理几乎所有事情。