zeppelin概述
Zeppelin,于2016-5-18日从Apache孵化器项目毕业成为Apache顶级项目,本质上是一个web应用程序,它以独立的jvm进程的方式来启动Interpreter(解释器),交互式(repl)执行各种语言的代码片段,并将结果以html代码片段的形式返回给前端UI。
源码结构分析
zeppelin的maven项目共有78个module(0.9.0版本),其中7个框架相关的module如下:
| Module | 作用 | 开发语言 |
|---|---|---|
| zeppelin-server | 项目的主入口,通过内嵌Jetty的方式提供Web UI和REST服务,并且提供了基本的权限验证服务 | java |
| zeppelin-zengine | 实现Notebook的持久化、检索实现interpreter的自动加载,以及maven式的依赖自动加载 | java |
| zeppelin-interpreter | 为了支持多语言Notebook,抽象出了每种语言都要事先的Interpreter接口,包括:显示、调度、依赖以及和zeppelin-engine之间的Thirft通信协议 | java |
| zeppelin-web | AngluarJS开发的web页面 | Javascript(主要是AngularJS、Node.JS以及使用websocket) |
| zeppelin-display | 实现向前台Angular元素绑定后台数据 | scala |
| spark | 将spark的interpreter及相关的module集成到一个module中,使整个工程的结构更加合理,flink也是类似的 | |
| zeppelin-distribution | 为了将整个项目打包成发布版,而设置的module,打包格式见src/assembly/distribution.xml |
关键模块之间的关系

依赖关系.png
interpreter的核心抽象
Interpreter抽象类的抽象接口的作用
以下是一些接口及主要接口的一些解释
- open() 打开解释器,可以将一些常规的初始化操作放在这里,这个方法只会调用一次。
- close() 关闭解释器,可以将一些释放资源的操作放在这里,这个方法只会调用一次。
- executePrecode() 如果有一些预处理操作可以放在这个方法中。
- interpret() 以同步的方式运行代码并返回结果,这个是解释器的主要执行方式。
- cancel() 可选的实现,用来取消中断interpret方法中的工作。
- getFormType()
- getProgress() 获取程序运行的进度。
- completion() 代码自动完成
- getScheduler()
- Interperter()
- getInterpreterGroup()
- getProperties() 关于properties的相关接口有很多,这里不一一列举,大体都是一些用各种形式获取properties的操作
- registerHook() Hook之类的操作目前还是标注为实验性质的,这里不一一列举。