收录于话题
#大数据常用技术15
#大数据17
#spark2
Spark 事件总线贯彻整个应用,TaskScheduler 、Executor、JobScheduler、SQLExecution等关键交互逻辑离不开event的传递,为了更好的发挥Spark性能,以及扩展Spark功能,掌握event传递机制显得尤其重要。总的来看,其流程相对清晰。基础过程如下图:
在LiveListenerBus定义一个queue成员变量队列,该队列只会保存4个子队列,分别是SHARED 、EXECUTOR_MANAGER、APP_STATUS、EVENT_LOG队列。每一个Async Event Queue包含EventQueue和Listeners。 4类子队列的作用分别如下:
SharedQueue:主要是用户代码中增加的监听器Listener,或通过配置添加的自定义监听器Listener。
ManagementQueue:可对关键服务进行监听,比如监听Executor的添加和移除事件。
StatusQueue:主要提供流任务和批任务的Job、Stage、Task的状态数据等。
EventLogQueue:将监听到的event通过监听器写入到某个指定存储里。
下面我们跟踪代码到addToQueue函数先分析监听器队列添加流程: