Spark Streaming揭秘 Day34 解析UI监听模式
2016-07-13 22:06
821 查看
Spark Streaming揭秘 Day34
解析UI监听模式
今天分享下SparkStreaming中的UI部分,和所有的UI系统一样,SparkStreaming中的UI系统使用的是监听器模式。监听器模式是指,首先注册事件源,当事件或者数据发生改变时,监听器就会接收到这个改变,并对这种改变做出响应,监听器模式可以简单的理解为一种MVC的模式。SparkStreaming中的UI系统有两个非常的支持,就是处理时间process time和Batch等待时间Scheduler Delay。一般情况来说,我们有两个很重要的要求,这也是监控的重点:
我们的处理时间应该是要小于delay。
delay不要一直增长,如果一直增长,表明系统无法处理输入,无法应对越来越多的batch,表明处理能力不足。
事件监听机制
在StreamingContext中,与监听相关最重要的就是监听器:![](http://o6jujlzry.bkt.clouddn.com/2016-07-13-Snip20160713_88.png)
里面有很多回调方法,以onBatchCompleted为例,发现是构建了一个BatchUIData,记录运行时的一些数据。
![](http://o6jujlzry.bkt.clouddn.com/2016-07-13-Snip20160713_89.png)
再看在uiTab UI本身,其实现是StreamingTab展示流式作业的统计信息。
![](http://o6jujlzry.bkt.clouddn.com/2016-07-13-Snip20160713_90.png)
首先,把listener注册给streamingContext和sparkContext,说明也会接收sparkContext的事件。
其次,通过attach方法添加页面。从截图中,可以看到,在Tab里面添加了两个页面,同时将Tab添加在sc的页面中,显示在整个spark的web控制台上。attach是在Streaming启动的时候调用的。
![](http://o6jujlzry.bkt.clouddn.com/2016-07-13-Snip20160713_94.png)
具体页面的实现是在StreamingPage的render方法中。里面是格式化页面的内容,div + css 编程。
![](http://o6jujlzry.bkt.clouddn.com/2016-07-13-Snip20160713_91.png)
![](http://o6jujlzry.bkt.clouddn.com/2016-07-13-Snip20160713_93.png)
在attachPage的时候,会封装render方法注册给servlet调用。页面被渲染出来,背后要有一个循环器,这个循环器是被jetty提供的。
![](http://o6jujlzry.bkt.clouddn.com/2016-07-13-Snip20160713_92.png)
具体事件
我们找一个具体的事件,看下这个事件具体的过程。我们看下作业完成时间:
![](http://o6jujlzry.bkt.clouddn.com/2016-07-13-Snip20160713_95.png)
我们注意到在JobScheduler发送消息时,里面包涵batchInfo。里面记录了处理开始结束的时间。
![](http://o6jujlzry.bkt.clouddn.com/2016-07-13-Snip20160713_96.png)
之后,通过监听器StreamingJobProgressListener,调用onBatchCompleted方法,会重新刷新一下数据。
![](http://o6jujlzry.bkt.clouddn.com/2016-07-13-Snip20160713_97.png)
在StreamingPage中,会读取listener中的数据,进行页面渲染。
![](http://o6jujlzry.bkt.clouddn.com/2016-07-13-Snip20160713_98.png)
最终,Jetty会根据数据,不断进行页面刷新。
欲知后事如何,且听下回分解!
DT大数据每天晚上20:00YY频道现场授课频道68917580相关文章推荐
- Priority Queues优先级队列详解
- IOS-Frameworks-UIKit-UIResponder.h-UIView.h
- servlet中request的作用域(包括存值和取值)
- IOS-Frameworks-UIKit-UIView.h-frame属性和bounds属性
- [LeetCode] Guess Number Higher or Lower
- HDU 1242 Rescue (第一道优先队列+BFS)
- An AnnotationConfiguration instance is required to use...等几个异常
- QueryTask查询结果最多500条的问题
- js信息滚动marquee标签
- UI基础_UIImageView的contentMode总结
- android studio 新建项目 界面一直停在 【“building ‘ 项目名’ gradle project info”】
- Qt之保持GUI响应
- Qt之保持GUI响应
- Qt之保持GUI响应
- 编译内核提示mkimage command not found – U-Boot images will not be built
- 【Android自助餐】Handler消息机制完全解析(二)MessageQueue的队列管理
- CodeChef DISTNUM2 Easy Queries 节点数组线段树
- AbstractQueuedSynchronizer(六)——release
- WeX5的简单介绍及UI的简单讲解
- android stuido常见问题查询网址(此贴不定期更新)