43:Spark Streaming中UI内幕实现彻底解密

55 篇文章 0 订阅
55 篇文章 0 订阅

本期内容:

1. Spark Streaming中UI的监听模式
2. Spark Streaming中UI具体源码解析

解析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会根据数据,不断进行页面刷新。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值