OFF_HEAP 在 spark 作业完成后,rdd 被 Tachyon 自动删除

OFF_HEAP rdd was removed automatically by Tachyon, after the spark job done

我运行一个spark应用程序,它使用StorageLevel.OFF_HEAP来持久化一个rdd(我的tachyon和spark都处于本地模式)。

像这样:

val lines = sc.textFile("FILE_PATH/test-lines-1")
val words = lines.flatMap(_.split(" ")).map(word => (word, 1)).persist(StorageLevel.OFF_HEAP)
val counts = words.reduceByKey(_ + _)
counts.collect.foreach(println)
...
sc.stop

坚持完成后,我可以从 localhost:19999(tachyon 的网站 UI)中看到我的 OFF_HEAP 文件,这是我例外的情况。

但是,在 spark 应用程序结束后(sc.stop,但 tachyon 正在工作),我的块(OFF_HEAP rdd)被删除了。而且我无法从 localhost:19999 中找到我的文件。这不是我想要的。 我认为这些文件在 persist() 方法之后属于 Tachyon(不是 spark),不应该被删除。

所以,谁删除了我的文件,什么时候? 这是正常的方式吗?

您正在寻找

  saveAs[Text|Parquet|NewHadoopAPI]File()

这是您真正需要的 "persistent" 方法。

相反

persist()

用于RDD的中间存储:当spark进程结束时,它们将被删除。这里来自源码注释:

  • Set this RDD's storage level to persist its values across operations after the first time it is computed.

重要的短语是 across operations - 作为处理的一部分(仅)。