执行其刚写完的项目进行测试时,遇到以下问题
ERROR yarn.ApplicationMaster: SparkContext did not initialize after waiting for 100000 ms. Please check earlier log output for errors. Failing the application
检查代码(Scala),发现其将SparkContext的创建写在了class中,并且其之前还有很多其他的业务逻辑代码
object SparkContextTest extends Serializable {
def main(args: Array[String]): Unit = {
try {
new SparkContextTest().run()
} catch {
case ex: Throwable =>
println(ex)
sys.exit(1)
}
}
}
class SparkContextTest() extends Serializable {
def run(): Unit = {
// 各种业务逻辑代码
val conf = new SparkConf()
.setAppName("SparkContextTest")
val sc = new SparkContext(conf)
val test = sc.longAccumulator
}
}
将SparkContext的创建抽取到object中,如下所示
object SparkContextTest extends Serializable {
def main(args: Array[String]): Unit = {
val conf = new SparkConf()
.setAppName("SparkContextTest")
val sc = new SparkContext(conf)
try {
new SparkContextTest(sc).run()
} catch {
case ex: Throwable =>
println(ex)
sys.exit(1)
}
}
}
class SparkContextTest(sc: SparkContext) extends Serializable {
def run(): Unit = {
// 各种业务逻辑代码
val test = sc.longAccumulator
}
}
可以正常执行,没有再出现类似问题
这主要是因为在进行spark-submit后,程序在yarn上处于accept状态,而长时间没有进行spark初始化,则会在超时后报错