繁体   English   中英

有没有办法在Spark中更改RDD的复制因子?

[英]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中的RDDpersist的默认存储级别确实是StorageLevel.MEMORY_ONLY - 但如果要创建DStream则通常会有所不同(请参阅DStream构造函数API文档)。 如果你使用的是Python,那就是StorageLevel.MEMORY_ONLY_SER

文档详细介绍了许多存储级别及其含义,但它们基本上是将Spark指向扩展StorageLevel的对象的配置简写。 因此,您可以使用最多40个复制因子来定义自己的。

请注意,在各种预定义存储级别中,有些会保留RDD的单个副本。 实际上,对于那些名称没有后缀为_2NONE除外)的所有内容都是如此:

  • DISK_ONLY
  • MEMORY_ONLY
  • MEMORY_ONLY_SER
  • MEMORY_AND_DISK
  • MEMORY_AND_DISK_SER
  • OFF_HEAP

这是他们使用的每种媒体的一个副本,当然,如果你想要一个整体的副本,你必须选择单中等存储级别。

正如huitseeker所说,除非你特别要求Spark持久化RDD并指定使用复制的StorageLevel,否则它不会有RDD分区的多个副本。

火花的作用是保持一个特定数据的计算方式,以便当一个节点失败时它只重复处理丢失的RDD分区所需的相关数据 - 根据我的经验,这主要是有效的有时,重新启动作业然后让它恢复更快

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM