Spark Streaming揭秘 Day34 解析UI监听模式

Spark Streaming揭秘 Day34

解析UI监听模式

今天分享下SparkStreaming中的UI部分,和所有的UI系统一样,SparkStreaming中的UI系统使用的是监听器模式。监听器模式是指,首先注册事件源,当事件或者数据发生改变时,监听器就会接收到这个改变,并对这种改变做出响应,监听器模式可以简单的理解为一种MVC的模式。

SparkStreaming中的UI系统有两个非常的支持,就是处理时间process time和Batch等待时间Scheduler Delay。一般情况来说,我们有两个很重要的要求,这也是监控的重点:

  1. 我们的处理时间应该是要小于delay。
  2. delay不要一直增长,如果一直增长,表明系统无法处理输入,无法应对越来越多的batch,表明处理能力不足。

事件监听机制

在StreamingContext中,与监听相关最重要的就是监听器:
Snip20160713_88

里面有很多回调方法,以onBatchCompleted为例,发现是构建了一个BatchUIData,记录运行时的一些数据。

Snip20160713_89

再看在uiTab UI本身,其实现是StreamingTab展示流式作业的统计信息。
Snip20160713_90

首先,把listener注册给streamingContext和sparkContext,说明也会接收sparkContext的事件。
其次,通过attach方法添加页面。从截图中,可以看到,在Tab里面添加了两个页面,同时将Tab添加在sc的页面中,显示在整个spark的web控制台上。attach是在Streaming启动的时候调用的。
Snip20160713_94

具体页面的实现是在StreamingPage的render方法中。里面是格式化页面的内容,div + css 编程。
Snip20160713_91
Snip20160713_93

在attachPage的时候,会封装render方法注册给servlet调用。页面被渲染出来,背后要有一个循环器,这个循环器是被jetty提供的。

Snip20160713_92

具体事件

我们找一个具体的事件,看下这个事件具体的过程。

我们看下作业完成时间:
Snip20160713_95

我们注意到在JobScheduler发送消息时,里面包涵batchInfo。里面记录了处理开始结束的时间。
Snip20160713_96

之后,通过监听器StreamingJobProgressListener,调用onBatchCompleted方法,会重新刷新一下数据。
Snip20160713_97

在StreamingPage中,会读取listener中的数据,进行页面渲染。
Snip20160713_98

最终,Jetty会根据数据,不断进行页面刷新。

欲知后事如何,且听下回分解!

DT大数据每天晚上20:00YY频道现场授课频道68917580

原文地址:https://www.cnblogs.com/dt-zhw/p/5668382.html