自定义queryExecutionListener未被调用

时间:2018-02-16 07:31:52

标签: apache-spark listeners

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

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

查看设置的属性

看起来 onSuccess和onFailure方法根本没有被称为

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

// customlistener的代码如下:

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}")  }

注意:我的火花版本是2.2.1

2 个答案:

答案 0 :(得分:0)

这取决于您如何调用spark提交。如果所有内容都在本地,则必须看到所有驱动程序共享同一控制台。 如果按毛线提交(工人是其他机器),则可以通过spark ui或其他日志查看工具查看日志。

答案 1 :(得分:0)

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