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系列详解(一) - 概述与入门 - 掘金


相关文章
|
存储 消息中间件 Kafka
Confluent 首席架构师万字剖析 Apache Fluss(一):核心概念
Apache Fluss是由阿里巴巴与Ververica合作开发的Flink表存储引擎,旨在提供低延迟、高效率的实时数据存储与变更日志支持。其采用TabletServer与CoordinatorServer架构,结合RocksDB和列式存储,实现主键表与日志表的统一管理,并通过客户端抽象整合湖仓历史数据,弥补Paimon在实时场景下的性能短板。
1250 23
Confluent 首席架构师万字剖析 Apache Fluss(一):核心概念
|
Dubbo Java 应用服务中间件
Apache ShenYu 架构学习指南
Apache ShenYu 是一款高性能、插件化的微服务API网关,基于Spring WebFlux + Reactor 构建,支持多协议、动态配置与实时数据同步。本指南以通俗类比和实战路径,带你深入理解其架构设计、核心流程与源码实现,助力快速掌握并参与贡献。
1768 12
|
存储 Cloud Native 数据处理
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
本文整理自阿里云资深技术专家、Apache Flink PMC 成员梅源在 Flink Forward Asia 新加坡 2025上的分享,深入解析 Flink 状态管理系统的发展历程,从核心设计到 Flink 2.0 存算分离架构,并展望未来基于流批一体的通用增量计算方向。
844 0
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
|
存储 消息中间件 Kafka
Confluent 首席架构师万字剖析 Apache Fluss(三):湖流一体
原文:https://jack-vanlightly.com/blog/2025/9/2/understanding-apache-fluss 作者:Jack Vanlightly 翻译:Wayne Wang@腾讯 译注:Jack Vanlightly 是一位专注于数据系统底层架构的知名技术博主,他的文章以篇幅长、细节丰富而闻名。目前 Jack 就职于 Confluent,担任首席技术架构师,因此这篇 Fluss 深度分析文章,具备一定的客观参考意义。译文拆成了三篇文章,本文是第二篇。
1076 25
Confluent 首席架构师万字剖析 Apache Fluss(三):湖流一体
|
存储 消息中间件 Kafka
Confluent 首席架构师万字剖析 Apache Fluss(二):核心架构
原文:https://jack-vanlightly.com/blog/2025/9/2/understanding-apache-fluss 作者:Jack Vanlightly 翻译:Wayne Wang@腾讯 译注:Jack Vanlightly 是一位专注于数据系统底层架构的知名技术博主,他的文章以篇幅长、细节丰富而闻名。目前 Jack 就职于 Confluent,担任首席技术架构师,因此这篇 Fluss 深度分析文章,具备一定的客观参考意义。译文拆成了三篇文章,本文是第二篇。
1176 20
|
SQL 分布式数据库 Apache
网易游戏 x Apache Doris:湖仓一体架构演进之路
网易游戏 Apache Doris 集群超 20 个 ,总节点数百个,已对接内部 200+ 项目,日均查询量超过 1500 万,总存储数据量 PB 级别。
1420 3
网易游戏 x Apache Doris:湖仓一体架构演进之路
|
弹性计算 负载均衡 Java
【上云基础系列 02-01】通过SLB+1台ECS+ESS弹性伸缩,搭建一个精简版的上云标准弹性架构(含方案及教程)
通常,构建一个弹性架构(即使是一个最基础的入门版),至少需要2台ECS。但是,很多小微企业刚开始上云的时候,为了节省成本不愿意购买更多的服务器。通过 “ALB+ESS弹性伸缩+1台ECS+RDS”方案,在保障低成本的同时,也不牺牲业务架构的弹性设计,更避免了很多人因为节省成本选择了单体架构后频繁改造架构的困局。 方案中的几个设计非常值得小微企业借鉴:(1)通过ALB/RDS的按量付费,节省了初期流量不大时的费用;(2)通过ESS弹性伸缩,不需要提前购买服务器资源,但是当业务增长或减少时却保持了资源弹性自动扩缩容。
|
Java 数据库连接 应用服务中间件
JavaWeb CRUD 与分页系统架构学习教程
本教程将带你一步步构建一个 Java Web 的 CRUD(创建、读取、更新、删除)及分页功能的示例应用,涵盖从基本概念到完整项目架构的各个层次。
507 3
|
存储 关系型数据库 分布式数据库
PolarDB 开源基础教程系列 1 架构解读
PolarDB 是阿里云研发的云原生分布式数据库,基于 PostgreSQL 开源版本,旨在解决传统数据库在大规模数据和高并发场景下的性能和扩展性问题。其主要特点包括: 1. **存储计算分离架构**:通过将计算与存储分离,实现极致弹性、共享一份数据以降低成本、透明读写分离。 2. **HTAP 架构**:支持混合事务处理和分析处理(HTAP),能够在同一系统中高效执行 OLTP 和 OLAP 查询。 3. **优化的日志复制机制**:采用只复制元数据的方式减少网络传输量,优化页面回放和 DDL 锁回放过程。 4. **并行查询与索引创建**:引入 MPP 分布式执行引擎。
867 8

热门文章

最新文章

推荐镜像

更多