我正在使用apache spark 0.8.0来处理大型数据文件,并在.map
上执行一些基本的.reduceByKey
和RDD
操作。
由于我使用的是具有多个处理器的单台计算机,因此在创建local[8]
SparkContext
val sc = new SparkContext("local[8]", "Tower-Aggs", SPARK_HOME )
但每当我提到多个处理器时,作业就会随机卡住(暂停/暂停)。它没有确定的地方被卡住,它只是随机的。有时它根本不会发生。我不确定它是否会在此之后继续但是它会在很长一段时间内停滞不前,之后我就放弃了这份工作。
但是,当我只使用local
代替local[8]
时,作业无缝地运行而不会被卡住。
val sc = new SparkContext("local", "Tower-Aggs", SPARK_HOME )
我无法理解问题出在哪里。
我正在使用Scala 2.9.3
和sbt
来构建和运行应用程序
答案 0 :(得分:1)
我使用spark 1.0.0并遇到了同样的问题:如果一个函数无限期地传递给转换或动作等待/循环,那么spark肯定不会唤醒它或者默认终止/重试它,在这种情况下,你可以杀死任务。
然而,最近的一项功能(推测性任务)允许spark启动复制任务,如果一些任务比同行的平均运行时间长得多。可以在以下配置属性中启用和配置:
spark.speculation false如果设置为" true",则执行推测执行任务。这意味着如果一个或多个任务在一个阶段中运行缓慢,它们将被重新启动。
spark.speculation.interval 100 Spark检查要推测的任务的频率,以毫秒为单位。
spark.speculation.quantile 0.75在为特定阶段启用推测之前必须完成的任务百分比。
spark.speculation.multiplier 1.5任务的速度比推测考虑的中位数慢多少。