背景
大数据数据需要查询分析可视化工具,AI数据挖掘和探索也需要相关可视化编辑工具,开源产品主要有两个一个是Zeppelin notebook 一个是jupyter notebook,其中juypter主要用于数据科学家、算法分析人员使用python进行数据分析、算法建模,相关企业如aws、百度、腾讯都有基于jupyter notebook去进行定制化开发,zeppelin notebook比较偏重于大数据数据查询分析可视化,支持多种大数据计算引、存储引擎擎如:Spark、Flink、Hive、Kylin等,现在对这两个产品进行介绍
Apache Zeppelin简介
Zeppelin是一个Web笔记形式的交互式数据查询分析工具,可以在线用scala和SQL对数据进行查询分析并生成报表,notebook可以包括多个paragraph(段)。paragraph是进行数据分析的最小单位,即在 paragraph中可以完成数据分析代码的编写以及结果的可视化查看。因此,一个paragraph 可看做是一个基本的任务单元。Zeppelin的后台数据引擎可以是Spark、flink、Python等,开发者可以通过实现更多的解释器来为Zeppelin添加数据引擎。
- 多解释器支持 image.png
- 丰富的数据可视化
- 其他功能
- IDEA插件 作为一个开发来说,通过idea插件跟zeppelin连接,可以很方便的编写代码,快速的进行数据查询分析。
Zeppelin 架构
Zeppelin的核心功能就是:通过不同的解释器支持多种语言的repl,并对返回结果进行可视化展示。
主要分成三块 1.Zeppelin 前端 2.Zeppelin Server 3.Zeppelin Interpreter
Zeppelin前端是基于AngularJS
Zeppelin Server是一个基于Jetty的轻量级Web Server,主要负责以下一些功能:1.登陆权限管理 、 2.Zeppelin配置信息管理 、3.Interpreter 配置信息和生命周期管理、 4.Note存储管理 、5.插件机制管理
zeppelin采用WebSocket技术的必要性问题,zeppelin是共享式、Notebook式的大数据分析环境,以repl的方式执行以Paragraph为最小粒度的代码段。
首先repl的方式强调实时反馈执行结果,特别是在大数据环境下,一段代码可能需要执行很长时间,在执行的过程中,zeppelin的用户期望看到执行进度和中间结果,需要在前后端之间建立一个长连接,便于实时传递数据。
另外zeppelin的另一个亮点是其结果可视化能力,需要在前后台传递图片,并且支持较大数据量的传输的能力(相对传统http技术)。
再者,由于是共享式环境,一个Note可能被多个用户同时看到、甚至编辑,需要在各个已经打开了同一个Note的web客户端之间同步Note的代码、执行结果和进度信息。
Jupyter 简介
Jupyter Notebook是一个开源的Web应用程序,允许用户创建和共享包含代码、方程式、可视化和文本的文档。它的用途包括:数据清理和转换、数值模拟、统计建模、数据可视化、机器学习等等。它具有以下优势:
可选择语言:支持超过40种编程语言,包括Python、R、Julia、Scala等。
分享笔记本:可以使用电子邮件、Dropbox、GitHub和Jupyter Notebook Viewer与他人共享。
交互式输出:代码可以生成丰富的交互式输出,包括HTML、图像、视频、LaTeX等等。
大数据整合:通过Python、R、Scala编程语言使用Apache Spark等大数据框架工具。支持使用pandas、scikit-learn、ggplot2、TensorFlow来探索同一份数据。
jupyter项目架构
架构图
项目关系图
jupyter项目利用了利用了ZeroMQ的Publisher-Subscriber模式来做通信,前后端通过websockets和http 请求进行交互。整个项目看起来挺负责,提供了灵活的可扩展的方式,可以通过定制kernel去实现。juypter 相比于zeppelin多进程的实现方式,资源利用率高,但是隔离性不如zeppelin。
总结
两个产品功能都差不多,不过相比较而言zeppeplin比较是适合企业级部署应用,支持比较多的大数据计算引擎,而juypter notebook比较适合于个人用户以及AI建模人员去使用,目前各大云厂商都有类似的结局方案,生产化的化基本上都是以云原生的方式去部署。
参考文档
http://wwj718.github.io/post/架构/jupyter-notebook-architecture/