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

标签 java scala hadoop apache-spark hadoop-yarn

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

最佳答案

首先,请注意 Spark 不会自动缓存所有 RDD,这仅仅是因为应用程序可能会创建许多 RDD,并且并非所有这些都将被重用。您必须对它们调用 .persist().cache()

你可以设置你想要持久化一个RDD的存储级别 myRDD.persist(StorageLevel.MEMORY_AND_DISK).cache().persist(StorageLevel.MEMORY_ONLY) 的简写。

对于 Java 或 Scala 中的 RDDpersist 的默认存储级别确实是 StorageLevel.MEMORY_ONLY——但如果您正在创建,则通常会有所不同DStream(请参阅您的 DStream 构造函数 API 文档)。如果您使用的是 Python,则为 StorageLevel.MEMORY_ONLY_SER

doc详细介绍了一些存储级别及其含义,但它们基本上是一种配置速记,用于将 Spark 指向扩展 StorageLevel class 的对象。 .因此,您可以定义自己的复制因子,最高可达 40。

请注意,在各种预定义的存储级别中,有些保留 RDD 的单个副本。事实上,所有那些名称后缀没有 _2 的都是这样(NONE 除外):

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

这是他们使用的每个介质一个副本,当然,如果您想要一个整体的副本,则必须选择单一介质存储级别。

关于java - 有没有办法改变 Spark 中 RDD 的复制因子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31624622/

相关文章:

java - 基本数学运算

azure - NativeAzureFileSystem 无法识别其他容器

javabean 到 xmltype 字符串

java - 什么是NullPointerException,我该如何解决?

java - hibernate 问题 "session is closed"

java - Hibernate 映射 1 到多

scala - Vector 上的 += 会出现奇怪/错误的类型错误

java - Joda-Time 日期时间 欧洲/柏林夏令时

scala - 在 Scala 中将当前类作为参数传递

hadoop - 如何显示包含特殊字符串的 HDFS 文件中的特定行