参考https://spark.apache.org/docs/1.6.2/programming-guide.html#performance-impact
Shuffle还会在磁盘上生成大量中间文件。从Spark 1.3开始,这些文件将被保留,直到不再使用相应的RDD并进行垃圾回收。这样做是为了在重新计算谱系的情况下不需要重新创建随机文件
我理解为什么会保留这些文件。但是,我似乎无法弄清楚这些中间文件是否在作业之间共享?
我的实验表明,这些随机播放文件不会在作业之间共享。任何人都可以确认吗?
我正在谈论的场景: ```
val rdd1 = sc.text...
val rdd2 = sc.text...
val rdd3 = rdd1.join(rdd2)
// at this point shuffle takes place
//Now, if I do this again:
val rdd4 = rdd1.join(rdd2)
// will the shuffle files be reused? And I think I ve got the answer, which is know since the rdds do not share the lineage
```
答案 0 :(得分:1)
在工作之间 - 是的。这是保留随机文件(What does "Stage Skipped" mean in Apache Spark web UI?)的全部目的。请考虑以下会话记录:
scala> val rdd1 = sc.parallelize(Seq((1, None), (2, None)), 4)
rdd1: org.apache.spark.rdd.RDD[(Int, None.type)] = ParallelCollectionRDD[0] at parallelize at <console>:24
scala> val rdd2 = sc.parallelize(Seq((1, None), (2, None)), 4)
rdd2: org.apache.spark.rdd.RDD[(Int, None.type)] = ParallelCollectionRDD[1] at parallelize at <console>:24
scala> val rdd3 = rdd1.join(rdd2)
rdd3: org.apache.spark.rdd.RDD[(Int, (None.type, None.type))] = MapPartitionsRDD[4] at join at <console>:27
scala> rdd3.count // First job
res0: Long = 2
scala> rdd3.foreach(_ => ()) // Second job
以及Spark UI的相应状态
在应用程序之间 - 没有。 <{1}}关闭时,将丢弃随机播放文件。
答案 1 :(得分:-1)
随机播放文件适用于作业中的各个阶段。其他工作无法使用这些随机播放文件。所以,afaik,不!无法在作业之间共享随机播放文件