单个 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类型整数表示,将存储在graphInfoIterable[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 记录可以有多大?的主要内容,如果未能解决你的问题,请参考以下文章

2000万条记录的SQL 库有多大?

Core SignalR 消息大小 - 有没有办法记录您的消息有多大?

RDD的三个机制

input() 函数的输入可以有多大?

Ubuntu 系统缓存的查看与清空(qbit)

Opensplice DDS 持久数据可以有多大?