[英]Is there a way to change the replication factor of RDDs in Spark?
根据我的理解,集群中的RDD中有多个数据副本,因此在节点发生故障的情况下,程序可以恢复。 但是,如果失败的可能性可以忽略不计,那么在RDD中拥有多个数据副本将是昂贵的内存方式。 所以,我的问题是,Spark中是否有一个参数,可以用来减少RDD的复制因子?
首先,请注意Spark不会自动缓存所有RDD
,因为应用程序可能会创建许多RDD
,并且并非所有RDD
都可以重用。 你必须在它们上调用.persist()
或.cache()
。
您可以使用myRDD.persist(StorageLevel.MEMORY_AND_DISK)
设置要用于保存RDD
的存储级别。 .cache()
是.persist(StorageLevel.MEMORY_ONLY)
的简写。
对于Java或Scala中的RDD
, persist
的默认存储级别确实是StorageLevel.MEMORY_ONLY
- 但如果要创建DStream
则通常会有所不同(请参阅DStream
构造函数API文档)。 如果你使用的是Python,那就是StorageLevel.MEMORY_ONLY_SER
。
该文档详细介绍了许多存储级别及其含义,但它们基本上是将Spark指向扩展StorageLevel
类的对象的配置简写。 因此,您可以使用最多40个复制因子来定义自己的。
请注意,在各种预定义存储级别中,有些会保留RDD
的单个副本。 实际上,对于那些名称没有后缀为_2
( NONE
除外)的所有内容都是如此:
这是他们使用的每种媒体的一个副本,当然,如果你想要一个整体的副本,你必须选择单中等存储级别。
正如huitseeker所说,除非你特别要求Spark持久化RDD并指定使用复制的StorageLevel,否则它不会有RDD分区的多个副本。
火花的作用是保持一个特定数据的计算方式,以便当一个节点失败时它只重复处理丢失的RDD分区所需的相关数据 - 根据我的经验,这主要是有效的有时,重新启动作业然后让它恢复更快
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.