Apache spark Spark实际上在磁盘上的什么位置持久化RDD?

Apache spark Spark实际上在磁盘上的什么位置持久化RDD?,apache-spark,Apache Spark,我在不同的存储级别上使用persist,但是当我仅使用内存和磁盘时,我没有发现性能上的差异 我想我的代码可能有问题。。。我在哪里可以找到磁盘上的持久化RDD,以便确保它们确实是持久化的 根据文件: spark.local.dir(默认情况下/tmp) 用于Spark中“临时”空间的目录,包括存储在磁盘上的映射输出文件和RDD。这应该在系统中的快速本地磁盘上。它也可以是不同磁盘上多个目录的逗号分隔列表。注意:在Spark 1.0及更高版本中,这将由群集管理器设置的Spark_LOCAL_DIRS(

我在不同的存储级别上使用persist,但是当我仅使用
内存
磁盘
时,我没有发现性能上的差异

我想我的代码可能有问题。。。我在哪里可以找到磁盘上的持久化RDD,以便确保它们确实是持久化的

根据文件:

spark.local.dir
(默认情况下
/tmp

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


您的观察可能有两个原因:

  • 因此,要使RDD发挥作用,您应该在调用
    persist()
    后对其调用操作(例如
    count()
  • 即使您确保执行了
    persist()
    ,实际数据也可能不会写入磁盘。实际上,您的写入方法会在数据写入磁盘后直接返回,因此,当您在写入之前读取数据时,它只会返回缓存的数据
那么,发生了什么? 在将rdd持久化为仅磁盘后,是否在每个节点上清除了linux
缓冲区缓存
,然后再对其进行操作并测量性能

所以我建议你做的是:

  • 仅将rdd持久化为磁盘,调用操作(例如count())使其持久化
  • 将应用程序休眠几秒钟,在此期间清除所有工作节点的
    缓存

    sync&&echo 3>/proc/sys/vm/drop\u缓存
  • 继续您的过程,并测量持久化RDD的性能

  • 是否有足够的RAM空间来持久化RDD?实际上是的。但是我正在对Spark进行基准测试,所以我希望它只在磁盘上保留以查看差异。Spark\u WORKER\u DIR或Spark\u LOCAL\u DIR是指示Spark在磁盘上缓存位置的属性