据我了解,集群中的RDD中存在多份数据,这样当某个节点发生故障时,程序可以恢复。然而,在失败的可能性可以忽略不计的情况下,在 RDD 中拥有多个数据副本在内存方面将是昂贵的。那么,我的问题是,Spark中是否有一个参数可以用来减少RDD的复制因子?
首先,请注意 Spark 不会自动缓存您的所有内容RDD
s,仅仅因为应用程序可能会创建许多RDD
s,并且并非所有这些都可以重复使用。你必须打电话.persist()
or .cache()
在他们。
您可以设置要持久保存的存储级别RDD
with
myRDD.persist(StorageLevel.MEMORY_AND_DISK)
. .cache()
是一个简写.persist(StorageLevel.MEMORY_ONLY)
.
默认存储级别为persist
确实是StorageLevel.MEMORY_ONLY
for an RDD
在 Java 或 Scala 中 – 但如果您要创建一个通常会有所不同DStream
(参考你的DStream
构造函数 API 文档)。如果你使用Python,那就是StorageLevel.MEMORY_ONLY_SER
.
The doc https://spark.apache.org/docs/latest/programming-guide.html#rdd-persistence详细介绍了许多存储级别及其含义,但它们从根本上来说是一种配置简写,用于将 Spark 指向扩展了存储级别的对象。StorageLevel class https://github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/storage/StorageLevel.scala。因此,您可以定义自己的复制因子,最高可达 40。
请注意,在各种预定义的存储级别中,有些保留单个副本RDD
。事实上,对于所有名称后缀不带有的名称都是如此_2
(除了NONE
):
- 仅磁盘
- 仅内存
- MEMORY_ONLY_SER
- 内存和磁盘
- MEMORY_AND_DISK_SER
- OFF_HEAP
这是他们使用的每个介质一个副本,当然,如果您想要整体上一个副本,则必须选择单介质存储级别。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)