mon*_*ter 4 amazon-ec2 apache-spark rdd
在Apache Spark上运行我的迭代程序时偶尔会收到消息:
INFO scheduler.DAGScheduler: Missing parents for Stage 4443: List(Stage 4441, Stage 4442)
Run Code Online (Sandbox Code Playgroud)
我收集它意味着它需要计算父母RDD- 但我不是100%肯定.我不只是得到其中一个,我最终得到的是100个,如果不是一次数千个 - 它完全减慢了我的程序,另一个迭代没有完成10-15分钟(它们通常需要4-10秒) .
我cache主要RDD在每次迭代时使用StorageLevel.MEMORY_AND_DISK_SER.下一次迭代使用它RDD.因此,谱系RDD因此变得非常大,因此需要缓存.但是,如果我正在缓存(并且溢出到磁盘),父母怎么会丢失?
我引用Cloudera的Imran Rashid的话:
如果阶段被拖曳地图阶段被跳过是很正常的,这些阶段被多次读取.例如,这是我之前写的一个示例程序,用于演示:"d3"不需要重新洗牌,因为每次读取时都使用相同的分区器.所以以这种方式跳过阶段是一件好事:
val partitioner = new org.apache.spark.HashPartitioner(10)
val d3 = sc.parallelize(1 to 100).map { x => (x % 10) -> x}.partitionBy(partitioner)
(0 until 5).foreach { idx =>
val otherData = sc.parallelize(1 to (idx * 100)).map{ x => (x % 10) -> x}.partitionBy(partitioner)
println(idx + " ---> " + otherData.join(d3).count())
}
Run Code Online (Sandbox Code Playgroud)
如果你运行它,如果你在UI中查看除了第一个作业之外的所有作业都有一个跳过的阶段.您还会在日志中看到这个:
15/06/08 10:52:37 INFO DAGScheduler:最后阶段的父母:名单(第12阶段,第13阶段)
15/06/08 10:52:37 INFO DAGScheduler:失踪父母:名单(第13阶段)
诚然,这不是很清楚,但这有点向你表明DAGScheduler首先创建了第12阶段作为必要的步骤,然后通过意识到第12阶段所需的一切已经存在而改变了主意,所以没有什么去做.
有关电子邮件来源,请参阅以下内容:http: //apache-spark-developers-list.1001551.n3.nabble.com/
| 归档时间: |
|
| 查看次数: |
3637 次 |
| 最近记录: |