注:不同spark版本源码可能不一样,本机spark版本是3.0.1
SparkListener
Spark中的事件监听机制,本质上其实就是观察者模式的实现,查看源码我们可以经常看到listener这种命名的类或对象,顾名思义,这就是监听器类或对象。下面就以SparkListener为例来解析事件监听是如何设计的。首先我们看SparkListener
*/***
** :: DeveloperApi ::*
** A* *default* *implementation* *for* `*SparkListenerInterface*` *that has no-op implementations* *for*
** all callbacks.*
***
** Note that* *this* *is an internal* *interface* *which* *might* *change* *in* *different* *Spark* *releases**.*
**/*
@DeveloperApi
abstract class SparkListener extends SparkListenerInterface {
//省略很多方法
override def onApplicationStart(applicationStart: SparkListenerApplicationStart): Unit = { }
override def onApplicationEnd(applicationEnd: SparkListenerApplicationEnd): Unit = { }
}
为了简化分析我们以应用的启动与结束来分析。这里我们可以看到onApplicationStart和onApplicationEnd两个方法,很明显是在应用执行前和执行完做一些事情。
监听器的结构
如果要要使得类在应用执行前和应用执行后做一些响应,就需要继承SparkListener类。
private class BasicJobCounter extends SparkListener{
/**
*app 开始时跳去的方法
* 该方法可以获取 appId,appName ,app开始的时间以及 执行程序的用户
* @param applicationStart
*/
override def onApplicationStart(applicationStart: SparkListenerApplicationStart): Unit = {
println("onApplicationStart")
println(s"applicationStart.appAttemptId = ${applicationStart.appAttemptId}")
println(s"applicationStart.appId = ${applicationStart

本文介绍Spark中的事件监听机制,即观察者模式的应用。通过实例详细解析了如何定义和使用监听器,以及监听器总线如何传递消息。
最低0.47元/天 解锁文章
713

被折叠的 条评论
为什么被折叠?



