Apache spark 为什么SparkListenerApplicationStart从未启动?

Apache spark 为什么SparkListenerApplicationStart从未启动?,apache-spark,Apache Spark,我正在编写一个Spark应用程序,需要截取正在运行的作业的状态。为此,我使用以下代码实现了一个SparkListener: class MyAppListener extends SparkListener { override def onApplicationStart(ev: SparkListenerApplicationStart): Unit = { println("AAA: Application Start") } override de

我正在编写一个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:applicationend”,但没有看到应用程序的开始

配置:

  • Spark版本1.2.0
  • Scala 2.10
  • 集群上的本地独立模式或客户端模式(相同行为)

您在错误的位置将侦听器添加到spark,当您启动spark上下文时,它也会启动您的应用程序。=>在您添加侦听器时,onApplicationStart已经启动

解决方案:将侦听器添加到SparkConf

sparkConf.set("spark.extraListeners","your.listener.class")

欢迎来到Stackoverflow。如果您添加示例代码片段以更精确地解释您的答案,那将是非常棒的。