我运行一个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
当坚持完成后,我可以从本地主机:19999(tachyon的Web UI)看到我的OFF_HEAP文件,这是我所异常(exception)的。
但是,在spark应用程序结束后(sc.stop,但tachyon正在工作),我的 block (OFF_HEAP rdd)被删除。我无法从 localhost:19999 找到我的文件。这不是我想要的。 我认为这些文件在 persist() 方法之后属于 Tachyon (不是 Spark),不应该删除它们。
那么,谁删除了我的文件,何时删除? 这是正常的方式吗?
最佳答案
您正在寻找
saveAs[Text|Parquet|NewHadoopAPI]File()
这才是您需要的真正的“持久”方法。
相反
persist()
用于RDD的中间存储:当spark进程结束时它们将被删除。以下是源代码注释:
- Set this RDD's storage level to persist its values across operations after the first time it is computed.
重要的短语是跨操作 - 这是(仅)处理的一部分。
关于apache-spark - Spark 作业完成后,OFF_HEAP rdd 被 Tachyon 自动删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29045681/