【问题标题】:How large can a single RDD record be?单个 RDD 记录可以有多大?
【发布时间】:2016-06-23 11:12:41
【问题描述】:

我有一个这样的 RDD:

val graphInfo: RDD[(Long, Int, Long, Long, Iterable[Long])]

节点用Long类型整数表示,将存储在graphInfoIterable[Long]中。 Iterable 中可以包含多少个元素?单个 RDD 记录的大小有哪些限制(如果有)?

【问题讨论】:

  • Iterable 的长度没有限制。它可能是无限的。
  • 我只是不确定 RDD 的 Iterable 中的元素过多是否会导致 spark 崩溃。
  • 这是一个不同的问题,关于 Spark,而不是 Scala。我怀疑是否有任何固定限制,但最终你会耗尽节点上的内存。真正的大数据聚合应该是 RDD 本身,而不是单个条目。用例是什么?
  • 我们想要分层聚类一个巨大的图。在每一步中,我们都需要将节点存储在集群中以进行下一次分区。每个集群在 RDD 中都有一个条目,该条目包含存储在一个 iterable[Long] 中的所有节点。
  • 那么,这是对图形建模的错误方法。如果您的 RDD 只包含几行,每行都非常大,那么使用 Spark 将一无所获。

标签: scala apache-spark iterable


【解决方案1】:

Iterable 中可以包含多少个元素

一个可迭代对象可能包含无限的元素。例如,如果可迭代对象来自流式源,只要该流式源可用,您就会收到元素。

我只是不确定 RDD 的 Iterable 中是否会有太多元素 使火花崩溃

这再次取决于您如何填充可迭代对象。如果你的 spark 作业有足够的内存,你应该没问题。找出答案的最好方法是简单地通过跟踪和错误,以及理解sparks limitations for RDD's memory size

【讨论】:

    【解决方案2】:

    如前所述,元素的数量没有限制。

    但是,单个 RDD 记录使用的 内存 量可能会受到限制:Spark 将最大 partition 大小限制为 2GB(见SPARK-6235)。每个分区都是记录的集合,所以理论上一条记录的上限是2GB(当每个分区包含一个单个记录时达到这个限制)。

    实际上,不鼓励超过几兆字节的记录,因为上面提到的限制可能会迫使您人为地增加分区数,使其超出最佳值。 Spark 的所有优化考虑都是为了处理尽可能多的记录(给定足够的资源),而不是处理尽可能大的记录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多