我根据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.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
答案 0 :(得分:0)
这取决于您如何调用spark提交。如果所有内容都在本地,则必须看到所有驱动程序共享同一控制台。 如果按毛线提交(工人是其他机器),则可以通过spark ui或其他日志查看工具查看日志。
答案 1 :(得分:0)
我发现(发生在我身上)一个常见的错误是,如果您在onSuccess()或onFailure()完成之前关闭会话,则不会调用方法。