暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Apache Zeppelin系列教程第二篇——整体架构

35

Zeppelin 架构

首先我们来了解下 Zeppelin的架构, Zeppelin 主要分3层。

Web前端

Zeppelin Server

Interpreter

Zeppelin前端负责前端页面的交互,通过Rest API 和WebSocket的方式与Zeppelin Server进行交互。Zeppelin Server是一个Web server,负责管理所有的note,interpreter 等等,Zeppelin Server不做具体的代码执行,会交给Interpreter来执行代码Interpreter 是一个独立的进程,负责具体前端用户提交的代码的执行(比如Spark Scala代码或者SQL代码等等)。Zeppelin Server与 Interpreter 自己是通过thrift 来进行通信,而且是双向通信。Zeppelin支持目前大部分流行的大数据引擎,上图只展示了其中3种比较常用的引擎:Flink,Spark,Jdbc

Zeppelin Server是独立的进程,进程日志在logs目录下的 zeppelin-{user}-{host}.log, 每个Interpreter也是一个独立的进程,进程日志是 logs目录下的 zeppelin-interpreter-{interpreter}-*.log, 所以如果碰到任何问题可以先去这两个log文件里去查找线索

关于zeppelin采用WebSocket技术的必要性问题,这里也做一下简单分析。zeppelin是共享式、Notebook式的大数据分析环境,以repl的方式执行以Paragraph为最小粒度的代码段。

1. 首先repl的方式强调实时反馈执行结果,特别是在大数据环境下,一段代码可能需要执行很长时间,在执行的过程中,zeppelin的用户期望看到执行进度和中间结果,需要在前后端之间建立一个长连接,便于实时传递数据。

2. 另外zeppelin的另一个亮点是其结果可视化能力,需要在前后台传递图片,并且支持较大数据量的传输的能力(相对传统http技术)。

3. 再者,由于是共享式环境,一个Note可能被多个用户同时看到、甚至编辑,需要在各个已经打开了同一个Note的web客户端之间同步Note的代码、执行结果和进度信息。

zeppelin 涉及到的技术

前端:

AngularJS

zeppelin 前端websocket 发送请求代码:zeppelin-web\src\components\websocket\websocket-message.service.js

后端:

Zeppelin使用了Jetty作为内嵌服务器,通信方式除了WebSocket,还使用Jersey框架提供了Restful服务。由于Zeppelin的解释器(Interpreter)是独立的JVM进程,因此Zeppelin使用Apache Commons Exec框架来使主进程可以启动解释器进程,并且使用Thrift框架在主进程与解释器进程间进行通信。Zeppelin还提供了Apache Shiro进行权限控制,使用Apache Lucence对Note进行全文检索。

后端启动服务的代码(Zeppelin Server 程序的入口类):zeppelin-server\src\main\java\org\apache\zeppelin\server\ZeppelinServer.java

后端接收websocket请求的代码:zeppelin-server\src\main\java\org\apache\zeppelin\socket\NotebookServer.java

后端接受rest请求的代码:zeppelin-server\src\main\java\org\apache\zeppelin\rest\NotebookRestApi.java

前端打包:zeppelin-web 里面运行 npm run build:dist

前端打包:zeppelin-web-angular 里面运行 npm run build

https://github.com/apache/zeppelin/blob/master/zeppelin-web-angular/README.md

后端服务打包:在根目录下 mvn clean package -DskipTests -Phadoop2

总结:

可以看到Apache Zeppelin 涉及到的相关技术还是挺多的,

前端涉及Angular,后端涉及websocket通讯、java8 function、commons-exec、thrift通讯,因此建议在学习的时候先了解相关技术栈便于更快地学习zeppelin

参考:

https://www.yuque.com/jeffzhangjianfeng/ggi5ys

zeppelin涉及到的相关技术介绍:

(1)websocket 介绍

https://www.ruanyifeng.com/blog/2017/05/websocket.html

https://blog.csdn.net/KeepStruggling/article/details/105543449

(2)java8 function新特性

https://zhuanlan.zhihu.com/p/130810876

(3)commons-exec 执行command命令

https://zhuanlan.zhihu.com/p/391200798

(4)thrift

https://juejin.cn/post/6844903622380093447


Apache Zeppelin 系列教程

Apache Zeppelin系列教程第一篇——安装和使用


你好,我是诸葛子房,前京东、BAT 程序员,Apache Griffin 和Apache Zeppelin Contributor,在大数据领域有多年实践经验,喜欢在工作之余写一些文章总结。

文章转载自诸葛子房的博客,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论