Zeppelin源码阅读之更新notebook的paragraph部分

Zeppelin是一款web笔记本,可以迭代式的进行数据分析。比如%spark就可以写spark application相关的scala代码,%sql就可以直接写spark sql,写完后直接运行看效果,还可以出各种柱状图、区域图等,非常方便。

但是,最近却遇到了一次机器突然断电后,notebook内容完全被清空的情况。写notebook的浏览器运行在一台机器上,而Zeppelin Server则运行在另一台机器上,两台机器在同一个局域网内。

所以,希望可以将Zeppelin更新notebook内容的机制弄清楚。

注:

在Zeppelin中,此为notebook:


而此为notebook的paragraph:


Zeppelin目录结构如下:


我们只挑当前关心的读,从前往后的读。

Web部分

Notebook主要在此:


具体行为为:

1.      发送websocket消息,根据指定的noteid得到note内容,渲染页面

2.      监听paragraph的点击,得到当前focus的paragraph

3.      监听按键事件,并broadcast按键事件

4.      监听用户关闭浏览器事件和页面跳转事件,在关闭浏览器、页面跳转前,先:

a.      killTimeSaver

b.      saveNote

saveNote会调用saveParagraph方法

notebook中的paragraph文件夹,是对paragraph的处理,具体行为为:

a.      写的代码内容在paragraph.text这个model中

b.      Editor监听input,当有input时调用aceChanged事件,aceChanged事件会调用startTimeSaver方法,startTimeSaver方法会调用saveNote方法,saveNote会调用saveParagraph方法

 

总而言之一句话,就是你写代码、关闭页面、刷新页面都会触发saveParagraph方法(这样就让人有随时写随时保存,不用担心保存问题的感觉)。那这个saveParagraph方法做了啥事情呢?它就是调用了commitParagraph方法,commitParagraph方法里:


将paragraph的标题、内容、配置以及参数都用websocketMsgSrv传了出去。

最终传输的就是这个:


Server部分

Zeppeline-server中的NotebookServer负责处理这各类消息,其中就包括COMMIT_PARAGRAPH消息。


具体的updateParagraph代码如下:


并且广播的操作参数为PARAGRAPH,通知前台。

其中note.persist方法会:

1.      先将内容写入.note.json

2.      mv .note.json为note.json

 

暂时想到的:

1.      不可能是写.note.json时断电,因为这样不会影响到至关重要的note.json文件

2.      从notebook目录来看,.note.json已经不存在了,只有note.json存在;所以可能是mv已经成功了或者mv根本没发生连.note.json都没有写(不过重testdisk恢复的情况看,8:41时是有.note.json这样一个空文件的)

3.      note.json的编辑时间是08:41,确实也是断电的时间;电是9点之后来的,所以不会是重启时有”恢复”机制将它恢复成了空


虽然还没想清楚原因,不过大致将更新notebook的过程整理了一下:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值