zeppelin源码分析——server端

本文深入分析Zeppelin源码,探讨组件结构与运行机制。Paragraph作为代码执行的基本单元,负责代码解析、执行及结果获取。Note是Paragraph的集合,管理权限和持久化。NotebookServer整合组件,通过WebSocket对外提供服务。运行时,ZeppelinServer启动服务,NotebookServer处理WebSocket通信,解释器执行代码并返回结果给服务器。解释器的选择基于%前缀或默认设置,由InterpreterSettingManager管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

zeppelin源码初探

主要看整个运行的流程。

1.组件部分

Paragraph代表着一段代码以及支撑其执行所需要的“环境信息”,是代码执行的最小单位。Paragraph的职责如下:
1. 获取代码文本,并解析分离类似%Spark的interpreter声明段和可执行代码段。
2. 代码执行,以及执行过程控制(进度和终止)
3. 代码执行结果获取
4. 代码中变量查找以及替换

Note是单个’记事本’的内存对象,是zeppelin管理的最小单位,无论是做权限控制、共享、还是持久化,都是以Note为粒度的。从类关系上看,Note是由一些列的有序Paragraph组成,因此其绝大部分职责都是与管理Paragraph有关:

Notebook实际上是Note的Manager,职责如下:
1. Note的CRUD,克隆、导入/导出
2. Note和相关Interpreter配置时和运行时映射关系维护
3. Note cron式调度执行控制

NotebookServer的主要功能是将Notebook、Note、Paragraph、Interpreter等类封装的能力,通过WebSocket的形式对web 客户端提供出去,所以其具体的职责包括:
1. 维护WebSocket连接与Note之间映射关系
2. 处理客户端和服务器之间的双向通信(通过WebSocket,具体的通信协议见:Message类),包括消息的序列化/反序列化,消息解析和服务端处理、处理结果的向客户端广播/单播发送等。
3. Note的CRUD操作以及Paragraph的CRUD操作、执行、导入、导出时的权限控制
4. 前后端AngularObject的双向bind处理
5. WebSocket客户端合法性校验(checkOrigin)

ZeppelinServer是各个组件的”组装者”,它是系统的主入口,职责如下:
1. 内嵌jetty服务器,支持以WebSocket和REST两种方式对外暴露系统功能
2. 创建NotebookServer实例,建立起处理WebSocket Connection和消息处理的服务端
3. 创建Notebook需要的相关依赖,如Note持久化服务(NotebookRepo)、Note的全文索引服务(SearchService),并完成向Note、Paragraph的注入。
4. Note权限配置文件的加载以及初始化
5. InterpreterFactory的初始化
6. 初始化动态依赖加载器(DependencyResolver)

2.运行部分

  1. 当我们启动zeppelin-daemon.sh start时:

    • 这个脚本里面定义了这样一个ZEPPELIN_MAIN=org.apache.zeppelin.server.ZeppelinServer变量。而ZeppelinServer是各个组件的”组装者”,它是系统的主入口
    • 在ZeppelinServer中启动了一系列的服务,包括web
    • NotebookServer是一个webSocket,在他的onMessage方法中,根据不同的消息类型,调用不同的方法

    • 当我们运行一个mysql的select语句时,onMessage收到的消息是:消息是一个json的字符串,op即为我们的操作(运行这个代码块),data包含了一些信息。

    {
        "op": "RUN_PARAGRAPH"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值