慧9建 发表于 2017-3-2 09:38:07

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

Spark Streaming揭秘 Day34
解析UI监听模式
  今天分享下SparkStreaming中的UI部分,和所有的UI系统一样,SparkStreaming中的UI系统使用的是监听器模式。监听器模式是指,首先注册事件源,当事件或者数据发生改变时,监听器就会接收到这个改变,并对这种改变做出响应,监听器模式可以简单的理解为一种MVC的模式。
  SparkStreaming中的UI系统有两个非常的支持,就是处理时间process time和Batch等待时间Scheduler Delay。一般情况来说,我们有两个很重要的要求,这也是监控的重点:

[*]我们的处理时间应该是要小于delay。
[*]delay不要一直增长,如果一直增长,表明系统无法处理输入,无法应对越来越多的batch,表明处理能力不足。
事件监听机制
  在StreamingContext中,与监听相关最重要的就是监听器:

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

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

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

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


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

具体事件
  我们找一个具体的事件,看下这个事件具体的过程。
  我们看下作业完成时间:

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

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

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

  最终,Jetty会根据数据,不断进行页面刷新。
欲知后事如何,且听下回分解!
  DT大数据每天晚上20:00YY频道现场授课频道68917580
页: [1]
查看完整版本: Spark Streaming揭秘 Day34 解析UI监听模式