单个 RDD 记录可以有多大?
Posted
技术标签:
【中文标题】单个 RDD 记录可以有多大?【英文标题】:How large can a single RDD record be? 【发布时间】:2016-06-23 11:12:41 【问题描述】:我有一个这样的 RDD:
val graphInfo: RDD[(Long, Int, Long, Long, Iterable[Long])]
节点用Long类型整数表示,将存储在graphInfo
的Iterable[Long]
中。 Iterable
中可以包含多少个元素?单个 RDD 记录的大小有哪些限制(如果有)?
【问题讨论】:
Iterable
的长度没有限制。它可能是无限的。
我只是不确定 RDD 的 Iterable 中的元素过多是否会导致 spark 崩溃。
这是一个不同的问题,关于 Spark,而不是 Scala。我怀疑是否有任何固定限制,但最终你会耗尽节点上的内存。真正的大数据聚合应该是 RDD 本身,而不是单个条目。用例是什么?
我们想要分层聚类一个巨大的图。在每一步中,我们都需要将节点存储在集群中以进行下一次分区。每个集群在 RDD 中都有一个条目,该条目包含存储在一个 iterable[Long] 中的所有节点。
那么,这是对图形建模的错误方法。如果您的 RDD 只包含几行,每行都非常大,那么使用 Spark 将一无所获。
【参考方案1】:
Iterable 中可以包含多少个元素
一个可迭代对象可能包含无限的元素。例如,如果可迭代对象来自流式源,只要该流式源可用,您就会收到元素。
我只是不确定 RDD 的 Iterable 中是否会有太多元素 使火花崩溃
这再次取决于您如何填充可迭代对象。如果你的 spark 作业有足够的内存,你应该没问题。找出答案的最好方法是简单地通过跟踪和错误,以及理解sparks limitations for RDD's memory size
【讨论】:
【参考方案2】:如前所述,元素的数量没有限制。
但是,单个 RDD 记录使用的 内存 量可能会受到限制:Spark 将最大 partition 大小限制为 2GB(见SPARK-6235)。每个分区都是记录的集合,所以理论上一条记录的上限是2GB(当每个分区包含一个单个记录时达到这个限制)。
实际上,不鼓励超过几兆字节的记录,因为上面提到的限制可能会迫使您人为地增加分区数,使其超出最佳值。 Spark 的所有优化考虑都是为了处理尽可能多的记录(给定足够的资源),而不是处理尽可能大的记录。
【讨论】:
以上是关于单个 RDD 记录可以有多大?的主要内容,如果未能解决你的问题,请参考以下文章