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

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

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

前端websocket请求

【webSocket 】Chrome 浏览器中查看 webSocket 连接信息_chrome websocket_大东子来搬砖的博客-CSDN博客

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

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

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

zeppelin/README.md at master · apache/zeppelin · GitHub

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

参考:

Apache Zeppelin · 语雀

https://www.jianshu.com/p/02596c7a2342

https://blog.csdn.net/swimhigh/article/details/80755666#comments_8150094

https://code-monkey.top/2019/06/12/Zeppelin%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90-note%E7%9A%84%E6%89%A7%E8%A1%8C%E8%BF%87%E7%A8%8B/

https://blog.csdn.net/spacewalkman/article/details/69230145

zeppelin源码分析——server端_H10242的博客-CSDN博客

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

(1)websocket 介绍

WebSocket 教程 - 阮一峰的网络日志

Websocket技术的Java实现(上篇)_@serverendpoint路径_KeepStruggling的博客-CSDN博客

(2)java8 function新特性

Java8新特性二: Functional Interfaces - 知乎

(3)commons-exec 执行command命令

程序员的福音 - Apache Commons Exec - 知乎

(4)thrift

Apache Thrift系列详解(一) - 概述与入门 - 掘金


相关文章
|
2月前
|
敏捷开发 缓存 架构师
Apache 架构师总结的 30 条架构原则
Apache 架构师总结的 30 条架构原则
23 0
|
2月前
|
运维 Linux Apache
LAMP架构调优(二)——修改Apache运行用户
LAMP架构调优(二)——修改Apache运行用户
197 1
|
2月前
|
运维 Linux Apache
LAMP架构调优(一)——隐藏Apache版本信息
LAMP架构调优(一)——隐藏Apache版本信息
16 1
|
2月前
|
运维 Linux Apache
LAMP架构调优(十)——Apache禁止指定目录PHP解析与错误页面优化
LAMP架构调优(十)——Apache禁止指定目录PHP解析与错误页面优化
199 2
|
2月前
|
架构师 前端开发
web全栈架构师第16期教程
互联网时代已进入后半场,行业环境发生了显著变化。互联网人,尤其是技术人员,如何在加速更迭的技术浪潮中持续充电,提升自身价值,是当下必须面对的挑战。课程涉及了现下前端实际开发时所需要的各块内容,并深度对标 阿里 P6+级别所具备的知识储备及开发技能,奠定源码阅读基础和全栈开发能力。
19 3
web全栈架构师第16期教程
|
2月前
|
Shell Linux Apache
【Shell 命令集合 网络通讯 】Linux 管理Apache HTTP服务器 apachectl命令 使用教程
【Shell 命令集合 网络通讯 】Linux 管理Apache HTTP服务器 apachectl命令 使用教程
163 1
|
2月前
|
运维 Linux Apache
LAMP架构调优(九)——Apache Rewrite功能实战
LAMP架构调优(九)——Apache Rewrite功能实战
14 1
|
2月前
|
运维 安全 Linux
LAMP架构调优(八)——Apache Worker模式调优
LAMP架构调优(八)——Apache Worker模式调优
9 0
|
2月前
|
缓存 运维 Linux
LAMP架构调优(七)——Apache Prefork模式调优
LAMP架构调优(七)——Apache Prefork模式调优
25 2
|
2月前
|
存储 SQL 分布式计算
TiDB整体架构概览:构建高效分布式数据库的关键设计
【2月更文挑战第26天】本文旨在全面概述TiDB的整体架构,深入剖析其关键组件和功能,从而帮助读者理解TiDB如何构建高效、稳定的分布式数据库。我们将探讨TiDB的计算层、存储层以及其他核心组件,并解释这些组件是如何协同工作以实现卓越的性能和扩展性的。通过本文,读者将能够深入了解TiDB的整体架构,为后续的学习和实践奠定坚实基础。

推荐镜像

更多