我正在编写Spark应用程序,我需要拦截正在运行的作业的状态。为此目的,我使用以下代码实现了SparkListener
:
class MyAppListener extends SparkListener {
override def onApplicationStart(ev: SparkListenerApplicationStart): Unit = {
println("AAA: Application Start")
}
override def onApplicationEnd(ev: SparkListenerApplicationEnd): Unit = {
println("AAA: Application End")
}
}
}
然后,我使用以下代码启动应用程序并查看事件:
val appListener = new MyAppListener
val conf = new SparkConf().setAppName("Listener")
val sc = new SparkContext(conf)
sc.addSparkListener(appListener)
println(sc.parallelize(1 to 10).count)
sc.stop()
在日志中,我看到字符串" AAA:Application End",但我看不到应用程序的开头。
配置:
答案 0 :(得分:9)
您正在将您的侦听器添加到错误位置的spark中,当您启动spark上下文时,它也会启动您的应用程序。=>在您添加监听器时,onApplicationStart已被触发。
解决方案:将您的侦听器添加到SparkConf。
sparkConf.set("spark.extraListeners","your.listener.class")