【问题标题】:Custom queryExecutionListener not being called未调用自定义 queryExecutionListener
【发布时间】:2018-02-16 07:31:51
【问题描述】:

我根据此处https://jaceklaskowski.gitbooks.io/mastering-spark-sql/spark-sql-ExecutionListenerManager.html 和此处https://jaceklaskowski.gitbooks.io/mastering-apache-spark/content/exercises/spark-exercise-custom-scheduler-listener.html 的信息创建了一个虚拟的自定义QueryExecutionListener(如下所示)。

自定义监听器只有一些打印语句。监听器是通过配置属性 spark.sql.queryExecutionListeners 添加的。但是,我在 spark submit 命令的控制台中看不到任何日志记录语句。 spark提交也没有错误。 我可以看到使用“spark.sqlContext.getAllConfs”设置的属性

看起来 onSuccess 和 onFailure 方法根本没有被调用

有没有人成功创建了自定义查询执行侦听器并使用 conf 属性“注册”了它?

//自定义监听器的代码如下:

class LineageListener extends QueryExecutionListener with Logging {
override def onSuccess(funcName: String, qe: QueryExecution, durationNs: Long): Unit = {
log.info("The function ${funcName} succeeded")
val sparkContext = qe.sparkSession.sparkContext
log info("App name: ${sparkContext.appName} and id is ${sparkContext.applicationId}")  }

override def onFailure(funcName: String, qe: QueryExecution, durationNs: Long): Unit = {
log.info("The function ${funcName} succeeded")
val sparkContext = qe.sparkSession.sparkContext
log info("App name: ${sparkContext.appName} and id is ${sparkContext.applicationId}")  }

注意:我的 spark 版本是 2.2.1

【问题讨论】:

    标签: apache-spark listeners


    【解决方案1】:

    这取决于你如何调用 spark 提交。如果一切都在本地,你必须看到,因为所有驱动程序共享同一个控制台。 如果你通过 yarn 提交(worker 是其他机器),你可以通过 spark ui 或其他日志查看工具查看日志。

    【讨论】:

      【解决方案2】:

      我发现(发生在我身上)的一个常见错误是,如果您在 onSuccess() 或 onFailure() 完成之前关闭会话,则不会调用方法。

      【讨论】:

        猜你喜欢
        • 2021-03-10
        • 1970-01-01
        • 2015-09-13
        • 2013-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多