Spark实际上将RDD保存在磁盘上的哪个位置?

时间:2015-05-05 15:34:09

标签: apache-spark

我在不同的存储级别上使用持久性,但在使用MEMORY_ONLYDISK_ONLY时,我发现性能没有差异。

我认为我的代码可能有问题...我在哪里可以找到磁盘上的持久RDD,以便确保它们实际上是持久的?

2 个答案:

答案 0 :(得分:4)

根据文件:

  

spark.local.dir(默认为/tmp

     

用于" scratch"的目录Spark中的空间,包括映射输出文件和存储在磁盘上的RDD。这应该位于系统中的快速本地磁盘上。它也可以是不同磁盘上多个目录的逗号分隔列表。注意:在Spark 1.0及更高版本中,这将由集群管理器设置的SPARK_LOCAL_DIRS(Standalone,Mesos)或LOCAL_DIRS(YARN)环境变量覆盖。

答案 1 :(得分:2)

观察的两个可能原因:

  • RDD为persisted in a lazy fashion,因此,为了使其有效,您应在致电count()
  • 后在其上调用操作(例如persist()
  • 即使您确定persist()发生了,实际数据实际上可能无法写入磁盘,您的write方法会在数据写入buffer cache后直接返回,因此,当您阅读它时在写入之后,它只返回缓存的数据。

那么,坚持到底了吗? 在将rdd保持为Buffer cache后,您是否清除了每个节点上的linux DISK_ONLY,然后对其进行操作并测量性能?

所以我建议你做的是:

  1. 将rdd保存为DISK_ONLY,调用一个动作(例如count()),使其保持不变。
  2. 让应用程序休眠几秒钟,在此期间清除所有工作节点的cache sync && echo 3 > /proc/sys/vm/drop_caches
  3. 恢复您的程序,并衡量持久RDD的效果。