【问题标题】:RDD partitioning in spark StreamingSpark Streaming中的RDD分区
【发布时间】:2016-01-04 12:06:20
【问题描述】:

spark streaming 中的批次是 RDD 的批次。假设批次为 3 个 RDD。

spark 文档还说接收者每 200 毫秒创建一个块,并将分区分配给该块。

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

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

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

【问题讨论】:

    标签: apache-spark spark-streaming


    【解决方案1】:

    这仍然适用于较新版本的 spark 吗?

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 谢谢@maasg。只是为了确认一下,如果我们有多个接收器,那么我们就有多个 DStream,每个 DStream 对应一个 RDD。所以,当我们联合多个 DStream 时,我们得到一个 DStream。此 DStream 由多个 RDD 或单个 RDD 组成?
      • @DineshSachdev108 Bu 定义 union() 将“返回一个新的 DStream,其中包含源 DStream 和 otherDStream 中的元素的联合”,这意味着结果也将是一个 dStream。根据定义,“DStream 表示为一系列 RDD。这意味着结果将包含多个 RDD,具体取决于您的接收器接收到的批次数。
      • @DineshSachdev108 DStream 将在每个时间间隔“交付”一个 RDDRDD 沿袭将由每个参与的 DStreamRDDs 的联合组成。
      • @datmannz 感谢您提请我注意这个评论问题。 DStream 表示为 随着时间推移 的 RDD 序列。在单个时间点,它将仅包含一个RDD。在联合的情况下,特定的RDD 将是来自不同参与DStreams 的底层RDDs 联合的结果。
      猜你喜欢
      • 2015-09-02
      • 2020-06-03
      • 2018-09-26
      • 1970-01-01
      • 2020-09-18
      • 1970-01-01
      • 2017-07-02
      • 2016-08-01
      • 2015-06-18
      相关资源
      最近更新 更多