开源项目
apache/zeppelin avatar
apache/zeppelin

Apache Zeppelin:一个把 SQL、Scala 和协作写进同一张网页的笔记本

基于 Web 的笔记本,支持使用 SQL、Scala 等进行数据驱动、交互式数据分析和协作文档。

6,656 个 Star2,838 个 ForkJavaApache-2.0

秒懂

它是什么?
Apache Zeppelin 是一个基于 Web 的笔记本工具,面向需要交互式数据分析的工程师和数据分析师。它用可插拔的解释器架构把多种语言塞进同一个文档,但部署和运维的复杂度也值得你提前掂量。
适合谁用?
Apache Zeppelin 适合那些已经依赖 Spark 或 Flink 做数据处理,并且希望把 SQL、Scala 和可视化集中在一个可分享文档里的团队。它不适合只跑简单查询的个人用户,也不适合对资源隔离要求极高的生产环境,因为每个解释器进程都占用独立 JVM,内存开销和调优成本都不低。
能商用吗?
可以。Apache-2.0 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
还在维护吗?
在维护。仓库最近一次提交在 1 天前。
用什么语言写的?
主要是 Java(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。

开源项目深度解析

它解决的是笔记本与多语言之间的断层

很多数据分析场景里,你要先在一个工具里写 SQL,再把结果导出到另一个工具画图,最后把结论贴进文档。Zeppelin 想把这几个步骤压进同一个 Web 页面。它提供笔记本风格的编辑器,支持 SQL、Scala、Python、Shell 等 20 多种解释器,而且允许多人在线协作编辑。这不是一个单纯的查询工具,它更像一个把代码、输出和可视化绑在一起的协作空间。对需要反复探索数据的团队来说,这种集成能省掉不少来回切换的功夫。

解释器架构是核心,也是理解它的钥匙

Zeppelin 的架构围绕可插拔的解释器展开。每个解释器是一个独立的进程,与主服务隔离,这意味着某个解释器崩溃不会拖垮整个笔记本。这种进程隔离设计也带来一个副作用:每个解释器都要占用独立的 JVM 内存,如果你同时启用 Spark、Flink 和 Python 三个解释器,资源消耗会成倍增加。文档里明确提到解释器架构支持进程隔离,但没提如何精细控制每个进程的内存上限。实际部署时,你需要自己调 JVM 参数,否则笔记本一多,内存就可能吃紧。

从零启动:安装和构建的真实路径

Zeppelin 提供了两种启动方式。第一种是下载官方二进制包,按照安装文档解压后直接运行,适合不想碰源码的人。第二种是从源码构建,文档里给出了详细的构建指南,但需要你提前装好 Java 和 Maven,并且要能访问外网拉依赖。README 没有给出具体的启动命令,但根据 Apache 项目的惯例,二进制包解压后通常执行 bin/zeppelin-daemon.sh start 就能启动服务。构建源码时,你需要设置 ZEPPELIN_INTERPRETER_DIR 之类的环境变量来指定解释器目录,但文档没有详述这些细节,建议直接查阅官方安装页面。

协作与调度:看似方便,但有隐藏成本

Zeppelin 支持实时协作编辑,这跟 Google Docs 的体验类似,但背后是同步协议和冲突处理的复杂度。多个人同时改一个笔记本,如果解释器状态不一致,后保存的人可能覆盖前一个人的结果。另外,笔记本调度用 cron 表达式,这意味着你可以让一个笔记本定时跑批处理。但调度任务跑在 Zeppelin 服务里,如果服务重启,调度会丢失,除非你配置了持久化存储。文档没有说明调度任务的持久化机制,这在实际运维中是个坑。

部署选项多,但每个选项都有取舍

Zeppelin 的部署方式覆盖了本地、Docker、Kubernetes 和 YARN。本地部署最简单,适合开发测试。Docker 适合快速起一个实例,但你要自己处理数据卷和端口的映射。Kubernetes 和 YARN 部署适合生产环境,能利用集群的资源管理,但配置复杂度陡增。文档只罗列了这些选项,没有给出对比。我的判断是,如果你已经有 YARN 集群,Zeppelin 集成 Spark 会相对顺畅,但如果你从零搭 Kubernetes,光解释器镜像和网络策略就够你折腾一阵。

真正的替代方案:Jupyter 与 Hue 的差异

说到交互式笔记本,Jupyter 是最常被拿来比较的。Jupyter 用内核(kernel)的概念,每个内核对应一种语言,但内核之间共享同一个进程空间,隔离性不如 Zeppelin 的解释器进程。Zeppelin 的优势在于多语言可以在同一个笔记本里无缝切换,而 Jupyter 通常需要你切换内核,数据传递要靠文件或内存对象。另一个替代是 Hue,它更专注于 SQL 查询和 Hive 集成,界面更轻,但不支持 Scala 或 Spark 的交互式编程。如果你只需要 SQL,Hue 的部署和资源占用都比 Zeppelin 低一个量级。

维护与升级:Apache 项目的双刃剑

Zeppelin 是 Apache 顶级项目,许可证是 Apache-2.0,这意味着你可以自由使用和修改,但没有任何商业支持。它依赖社区维护,文档和版本更新的节奏可能不稳定。从仓库信息看,最近没有发布新版本,这可能是项目进入稳定期,也可能是维护活跃度下降。升级时,你需要关注解释器版本的兼容性,比如 Spark 版本升级后,Zeppelin 的 Spark 解释器可能需要同步更新。另外,cron 调度和协作功能依赖后端存储,升级前要备份笔记本数据。没有商业公司的背书,出了问题只能靠邮件列表和 Jira,这对生产环境来说是个现实风险。

编辑结论

Apache Zeppelin 适合那些已经依赖 Spark 或 Flink 做数据处理,并且希望把 SQL、Scala 和可视化集中在一个可分享文档里的团队。它不适合只跑简单查询的个人用户,也不适合对资源隔离要求极高的生产环境,因为每个解释器进程都占用独立 JVM,内存开销和调优成本都不低。在决定采用之前,先确认你的集群版本与 Zeppelin 的兼容性,检查解释器进程的隔离级别是否满足你的安全要求,并试用 cron 调度功能,看它能否替代你现有的任务编排工具。如果你只需要一个轻量的 SQL 查询界面,Zeppelin 的安装和配置可能超出你的实际需求。

官方来源

  1. Official documentation
  2. Official README
  3. Project repository
社区笔记

社区笔记