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

2024-02-01

据我了解,集群中的RDD中存在多份数据,这样当某个节点发生故障时,程序可以恢复。然而,在失败的可能性可以忽略不计的情况下,在 RDD 中拥有多个数据副本在内存方面将是昂贵的。那么,我的问题是,Spark中是否有一个参数可以用来减少RDD的复制因子?


首先,请注意 Spark 不会自动缓存您的所有内容RDDs,仅仅因为应用程序可能会创建许多RDDs,并且并非所有这些都可以重复使用。你必须打电话.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(使用前将#替换为@)

有没有办法改变 Spark 中 RDD 的复制因子? 的相关文章

随机推荐