通过设置存储级别(例如MEMORY_ONLY_2,MEMORY_AND_DISK_2等)来具有复制分区的优点是什么?
如果我们已经有了HDFS复制,那么拥有这个副本有什么用?
答案 0 :(得分:3)
使用 MEMORY_ONLY_2 / MEMORY_AND_DISK_2 持久存储Spark RDD / DataSet时,数据不会进入HDFS。它存储在运行任务的节点的本地文件存储中。
复制由Spark处理,而不由HDFS处理。如果无法检索持久分区,Spark必须重新计算分区。复制2可以确保在两个节点上复制持久分区。
您还可以在Spark UI上获取持久分区的一些详细信息。在“存储”选项卡下,您可以查看所有保留的数据。您可以看到持久存储数据的节点,内存(堆上/堆外)和磁盘中分区的大小。等等
答案 1 :(得分:0)
火花RDD /数据集被懒惰地评估。
如果两个单独的操作依赖于同一RDD / DS,则将对RDD / DS进行两次评估,这可能是一项昂贵的操作。
为了减少这种情况的发生,我们可以缓存/持久保留RDD / DS,以便在第二次或以后需要从缓存中加载RDD / DS时使用。
.cache将使用存储级别MEMORY_AND_DISK评估RDD / DS后将其存储。另外,也可以使用.persit,它可以完全控制存储级别。
作为一般经验法则,如果您不止一次使用昂贵的RDD / DS计算RDD / DS,则考虑对其进行缓存。