Apache spark Spark:onApplicationStart从未被调用

Apache spark Spark:onApplicationStart从未被调用,apache-spark,stream,Apache Spark,Stream,MyJavaSparkListener类 package com.streamanalytix.spark.core.pipeline; import org.apache.commons.logging.Log; import org.apache.spark.JavaSparkListener; import org.apache.spark.scheduler.SparkListenerApplicationEnd; import org.apache.spark.scheduler.S

MyJavaSparkListener

package com.streamanalytix.spark.core.pipeline;

import org.apache.commons.logging.Log;
import org.apache.spark.JavaSparkListener;
import org.apache.spark.scheduler.SparkListenerApplicationEnd;
import org.apache.spark.scheduler.SparkListenerApplicationStart;
import org.apache.spark.scheduler.SparkListenerBlockManagerAdded;
import org.apache.spark.scheduler.SparkListenerBlockManagerRemoved;

public class MyJavaSparkListener extends JavaSparkListener {

    /** The Constant LOGGER. */
    private static final Log LOGGER = LogUtil.getLogger(MyJavaSparkListener.class);

    public MyJavaSparkListener() {
        super();
        LOGGER.info("---------------------------------------------- Creating new SaxJavaSparkListener");
    }

    @Override
    public void onApplicationStart(SparkListenerApplicationStart arg0) {
        LOGGER.info("---------------------------------------------- Spark pipeline is up and running...");
    }

    @Override
    public void onApplicationEnd(SparkListenerApplicationEnd arg0) {
        LOGGER.info("---------------------------------------------- Spark pipeline going to shutdown...");
    }

    @Override
    public void onBlockManagerAdded(SparkListenerBlockManagerAdded blockManagerAdded) {
        LOGGER.info("---------------------------------------------- onBlockManagerAdded");
    }

    @Override
    public void onBlockManagerRemoved(SparkListenerBlockManagerRemoved blockManagerRemoved) {
        LOGGER.info("---------------------------------------------- onBlockManagerRemoved");
    }
}
我正在向下面的行注册此侦听器

context.sparkContext().sc().addSparkListener(new MyJavaSparkListener());
我正在客户端模式下运行Spark应用程序,但我没有看到为ApplicationStart或ApplicationEnd打印的任何日志。但是,将调用onblockmanageraded,并打印日志。 我不知道Application Start的
有什么用途,或者如何使用它,因为文档太有限


谢谢。

问题是
SparkListenerApplicationStart
在您注册侦听器之前已经发送。为了避免这种情况,您可以使用配置
spark.extrallisteners
。然后Spark将在任何事件之前注册您的侦听器。以下是有关此配置()的说明:

实现SparkListener的类的逗号分隔列表;初始化SparkContext时,将创建这些类的实例,并使用Spark的侦听器总线进行注册。如果一个类有一个接受SparkConf的单参数构造函数,那么将调用该构造函数;否则,将调用零参数构造函数。如果找不到有效的构造函数,SparkContext创建将失败并出现异常


问题是在注册侦听器之前,已发送了
SparkListenerApplicationStart
。为了避免这种情况,您可以使用配置
spark.extrallisteners
。然后Spark将在任何事件之前注册您的侦听器。以下是有关此配置()的说明:

实现SparkListener的类的逗号分隔列表;初始化SparkContext时,将创建这些类的实例,并使用Spark的侦听器总线进行注册。如果一个类有一个接受SparkConf的单参数构造函数,那么将调用该构造函数;否则,将调用零参数构造函数。如果找不到有效的构造函数,SparkContext创建将失败并出现异常