一、注册监听器并消费事件
1、创建 SparkEnv
org.apache.spark.SparkContext#createSparkEnv
2、启动用户设置的监听器
org.apache.spark.SparkContext#setupAndStartListenerBus
val EXTRA_LISTENERS = ConfigBuilder("spark.extraListeners")
conf.get(EXTRA_LISTENERS).foreach { classNames =>
val listeners = Utils.loadExtensions(classOf[SparkListenerInterface], classNames, conf)
listeners.foreach { listener =>
listenerBus.addToSharedQueue(listener)
logInfo(s"Registered listener ${listener.getClass().getName()}")
}
}
3、将监听器添加到 shared 队列
org.apache.spark.scheduler.LiveListenerBus#addToSharedQueue
org.apache.spark.scheduler.LiveListenerBus#addToQueue
判断队列是否存在,如果存在就将监听器放到队列中,不存在要新建队列:AsyncEventQueue
queues.asScala.find(_.name == queue) match {
case Some(queue) =>
queue.addListe