文章目录
背景
由于livy官方文档并不是很全,工作又要用到,所以,需要对livy进行源码剖析,并解决工作用遇到的一些问题所要做的
本人对其进行了扩展分析,并对每个类进行了细分与功能的描述,本问从livy的启动阶段以及用户交互阶段(本文只对交互式对象进行分析,批量处理就很容易自行弥补了)分别进行解读,目前是以0.8.0-incubator版本进行的解读(更新到2019-12-05日)
这里感谢 前行中632 博主提供的时序图,利用时序图概念,对这个框架进行了比较宏观的理解。
希望读者在阅读如下内容的时候,对store, servlet,manager,listener,filter,batch,interactive这些英文单词有个比较感性的认识。store就是存储东西的地方,servlet就是小服务一般对应到的是web服务器中的servlet专门处理请求的服务部门,manager,就是管理者,管理什么就看你要管理什么了。listener,监听器,在web服务器中,监听器对象在整个应用生命周期中有且只有一份,且在应用开启的时候,会触发具体的初始化事件,方便开发者自定义一些功能,filter过滤器,其实这个过滤器是针对web每次请求都会进行过滤的,对于哪些会过滤,这里就不细说了,batch就是批处理,其实对应的是spark中的一次可以终结的任务,interactive,就是交互式的意思,在spark中的spark-shell就是类似于交互式的。
启动阶段
livy启动图 ,读者先仔细看看这个东东,结合时序图,依次顺序的读
注1:由图中所示带圈圈的,均表示对象单例实例,也就是在启动阶段是全局只有一份。在后续的与livy交互过程中是不会生成多例的
注2: 要特别留意深颜色的单例实例,因为这些实例与用户交互阶段息息相关
注3: 为什么有两条虚线呢?其实个人觉得这两条虚线也就是注入操作完全可以由manager执行,不过这也不伤大雅,因为软件的升级维护,是在不断进行的,可以肯定在新版本中,会去掉这些虚线的,确保每个对象职责单一原则,这里按下不表
livyServer [livy-server模块]
该类是livy服务的启动入口,通过如下命令开启livy服务
bin/livy-server start
webserver
这个是livyServer启动类启动的一个由jetty框架编写的web服务单例对象,这个服务主要的功能就是注入一些小服务(servlet),用来与用户或者客户端进行rest-api交互用的,同时也会注入一些filter用来做安全验证方面的过滤,
小服务分类
小服务主要的作用是注入到web服务中的并能与用户(客户端)进行交互的容器对象,经过图中可以看到在 livy启动阶段会生成两个manager单例,一个是用来管理interactiveSessions的,另一个是用来管理batchSessions的,这里的sessions在 用户阶段中会有详细剖析,这里只要简单理解为,当一个浏览器向webserver服务发起一个请求的时候,就会在整个应用中生成对用的sessions实例,后续的所有交互使用都是通过这个这个创建的session进行交互的,因此,需要有个管理者(manager)对其进行管理,确保这个管理者在LivyServer应用中有且只有一份,不然不好管理的(试想 一个员工既被一个领导管理,又被另一个领导管理,到时候要分配工作的时候,这两个领导肯定会相互掐…)。两个manager同时共用一份sessionStore对象,这个sessionStore就类似于对工作人员管理的档案室,所有档案信息都会放入这个sessionStore中,确保这个档案室有且只有一个,这个是机密文档,一定只能由一个档案室管理。
接下来对这些小服务进行功能上的剖析
interactiveSessionServlet
这个是用户发起 h o s t + " s e s s i o n s " host + "sessions" host+"sessions" 请求的时候触发创建一个交互式session的servlet,并且在用户新建session的时候,会自动把这个session的相关信息,注入到sessionStore中,用来对session进行管理
batchSessionServlet
这个是用户发起 h o s t + " b a t c h e s " host + "batches" host+"batches" 请求的时候触发创建一个批处理session的servlet,并且在用户新建session的时候,会自动把这个session的相关信息,注入到sessionStore中,用来对session进行管理
其他servlet
其他servlet就是对静态资源的读取,比如web网页查看具体信息的servlet,以及重定向规则和版本控制均会放在这里进行处理。这里并不是重点,对于用户交互阶段,最关心的应该是上面两个servlet,所以这里就不再细说了。
用户交互阶段
右击打开图
上类关系图
(未完待续,图也在完善中)
Livy官网
Livy Github 源项目