在作业之间共享的随机中间文件?

时间:2018-06-08 03:35:34

标签: apache-spark

参考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

```

2 个答案:

答案 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的相应状态

    enter image description here

  • 在应用程序之间 - 没有。 <{1}}关闭时,将丢弃随机播放文件。

答案 1 :(得分:-1)

随机播放文件适用于作业中的各个阶段。其他工作无法使用这些随机播放文件。所以,afaik,不!无法在作业之间共享随机播放文件