2

我运行一个 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 的 Web UI)看到我的 OFF_HEAP 文件,这是我的例外。

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

那么,谁删除了我的文件,何时删除?这是正常的方式吗?

4

1 回答 1

2

你正在寻找

  saveAs[Text|Parquet|NewHadoopAPI]File()

这是您需要的真正“持久”方法。

反而

persist()

用于 RDD 的中间存储:当 spark 过程结束时,它们将被删除。以下是源代码注释:

  • 设置此 RDD 的存储级别以在第一次计算后跨操作保留其值。

重要的短语是跨操作- 即作为处理的一部分(仅)。

于 2015-03-14T06:04:42.457 回答