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