文章目录
中文参考文档比较少,主要照官网 0.10.0 版本的docs过了一遍
Zeppelin概述
- Apache Zeppelin官网:
http://zeppelin.apache.org/
功能
支持各种语言、引擎的 大数据分析与可视化 WEB平台
支持接入多种数据引擎,比如jdbc、spark、hive等
支持多种语言进行交互式的数据分析,比如Scala、SQL、Python等等
安装
是一个java web项目,依赖于jdk
方式1:安装包
1. 官网下载二进制包,解压 $ZEPPELIN_HOME
2. $ZEPPELIN_HOME/conf/zeppelin-env.sh 配置jdk路径
3. $ZEPPELIN_HOME/conf/zeppelin-site.xml 配置端口
4. $ZEPPELIN_HOME/bin/zeppelin-daemon.sh start 启动
5. 访问web页面
方式2:官方docker镜像
$ docker pull apache/zeppelin:0.10.1
$ docker run -u $(id -u) -p 8080:8080 -itd --rm -v $PWD/logs:/logs -v $PWD/notebook:/notebook -e ZEPPELIN_LOG_DIR='/logs' -e ZEPPELIN_NOTEBOOK_DIR='/notebook' --name zeppelin apache/zeppelin:0.10.1
# 访问 ip:8080
#命令说明
docker run
-u $(id -u) #创建目录权限
-p 8080:8080 #访问端口
-itd --rm
# 配置:logs,笔记存储地址
-v $PWD/logs:/logs
-v $PWD/notebook:/notebook
-e ZEPPELIN_LOG_DIR='/logs'
-e ZEPPELIN_NOTEBOOK_DIR='/notebook'
--name zeppelin apache/zeppelin:0.10.1
其他支持模式:
-
flink,spark集群模式
-
集成hadoop,使用hdfs 存储note,yarn模式
-
多用户
-
集成外部存储:git,oss,MongoDB
概念
paragraph 段落
写代码,执行代码的单元,等同于一个Job。
分为3部分
-
code section 编码
# 第一行定义interpreter类型 %flink # 开发代码 coding...
-
result section 执行结果
内置了可视化功能,可自定义扩展
-
Paragraph commands 操作【执行code,显示/隐藏code section,显示/隐藏result section,其他设置】
显示排版,导出result链接
result section 可视化
任何语言后端的任何输出都可以被识别和可视化。
- 内置可视化模块使用
https://zeppelin.apache.org/docs/0.10.0/usage/display_system/basic.html#table
- 自定义可视化模块
https://zeppelin.apache.org/docs/latest/development/helium/writing_visualization_basic.html
Note 笔记
paragraph的集合
可按显示顺序依次执行所有段落
定时调度
https://zeppelin.apache.org/docs/latest/usage/other_features/cron_scheduler.html
每个 notebook 提供了一个 cron 调度程序
Notebook 笔记本
Note的集合
![image-20220830105650624](https://i-blog.csdnimg.cn/blog_migrate/2e1802b3f39c546b876f86854af4f1a9.png)
interpreter
解释器,对应一种语言、引擎。
-
允许将任何语言/数据处理后端插入 Zeppeli
-
支持 20 多种不同的解释器,如 Spark、Flink、Python、R、JDBC、Markdown 和 Shell。
- https://zeppelin.apache.org/docs/latest/#available-interpreters
-
支持自定义新的解释器
InterpreterGroup:
一个InterpreterGroup中包含多个Interpreter,同组内的Interperter共享相同的配置信息,例如Spark和SparkSQL interpreter在一个InterpreterGroup内。
运行模式
Flink解释器 支持 4 种执行模式
- Local
- Remote
- Yarn
- Yarn Application
spark 解释器 4 种执行模式
- Local
- Standalone
- Yarn
- K8s
生命周期
0.8.0 之前,Zeppelin 没有解释器的生命周期管理。用户必须通过 UI 显式关闭解释器
0.8.0 开始,提供了一个新的接口 LifecycleManager
来控制解释器的生命周期。目前,有两种实现方式:NullLifecycleManager
(和0.8.0之前一样)和TimeoutLifecycleManager
(闲置一段时间后自动关闭).
interpreter Setting
一个InterpreterGroup会有一个InterpreterSetting,包含interpreter的配置
例如,需要为 mysql解释器设置某些属性才能连接到 mysql 服务器。
- mysql连接配置:
Binding Mode,绑定模式
Interpreter Process 是一个 JVM 进程
有3种工作范围:Globally 全局,per note 每个note,per user 每个用户
有 3 种不同的模式来运行解释器进程:shared、scoped和isolated。
- shared共享: 所有段落共用 一个Interpreter进程,一个session
- scoped作用域:所有段落共用 一个Interpreter进程;但note有独立的session
- isolated隔离:所有段落都是独立的Interpreter进程和session
https://zeppelin.apache.org/docs/0.10.1/usage/interpreter/interpreter_binding_mode.html
其他
ZeppelinContext 上下文
功能:在不同note之间数据交互
在许多编程语言解释器(例如 Apache Spark、Python、R)中,zeppelin-context 可用作预定义变量z
,可通过直接调用其方法来使用
ZeppelinContext(变量名为z)提供一些高级用法的Class
# 展示数据
z.show(Batch Table、Stream Table)
传输对象
- 段落中使用
%python
z.put("objName", "hello word")
z.get("objName")
- 不同解释器之间
%spark
z.put("maxAge", 83)
%jdbc(interpolate=true)
select * from bank where age = {maxAge}
- DataFrame
%jdbc(saveAs=bank)
select * from bank
%python.ipython
%matplotlib inline
import warnings
warnings.filterwarnings("ignore")
from plotnine import ggplot, geom_histogram, aes, facet_wrap
# 获取 pandas DataFrame
# getAsDataFrame参数 为 (%spark.sql 或 %jdbc)的result
bank = z.getAsDataFrame('bank')
(ggplot(bank, aes(x='age'))
动态表单
在 Scala 和 Python 环境中,您可以通过编程方式创建表单。
z.input()
z.select()
z.checkbox()
https://zeppelin.apache.org/docs/latest/usage/other_features/zeppelin_context.html
动态表单
功能:动态创建一些输入表单。
- md 可通过
${}
模板 定义输入变量 - 编程语言通过 ZeppelinContext提供的方法创建
https://zeppelin.apache.org/docs/latest/usage/dynamic_form/intro.html
原理
- 前后台交互模型
Server
用于建立并维护前端网页与后端服务器之间的Websocket连接;
它其实是一个job listener,
- 接收并处理前端网页发来的Note执行请求,
- 在后端生成并执行相应的job,
- 将job执行的状态信息广播到所有的前端页面。
interpreter进程
zeppelin采用单独的jvm来启动interpreter进程,
每一个Interpreter都属于一个InterpreterGroup,同一个InterpreterGroup的Interpreters可以相互引用
- 运行方式
JVM进程可以是和Zeppelin Server在同一台机器上(默认local方式),也可以run在Zeppelin集群里的其他任何机器上或者K8s集群的一个Pod里
- 通讯方式
Interpreter进程与zeppelinServer进程之间采用Thrift协议通信
- Interpreter接口
Open // 是初始化部分,只会调用一次。
Close // 是关闭释放资源的接口,只会调用一次。
Interpret // 会运行一段代码并返回结果,同步执行方式。
Cancel //可选的接口,用于结束interpret方法
getPregress //方法获取interpret的百分比进度
completion //基于游标位置获取结束列表,实现这个接口可以实现自动结束
使用
默认安装访问 http://ip:8080 开始
左侧列出了所有现有笔记,默认存储在$ZEPPELIN_HOME/notebook
文件夹
- ui介绍
https://zeppelin.apache.org/docs/latest/quickstart/explore_ui.html
mysql 实操案例
配置interpreter 连接数据库
- 打开interpreter
![image-20220829112913168](https://i-blog.csdnimg.cn/blog_migrate/375a6db7160e8fd87dc1f09fdc361357.png)
-
新建interpreter,类型为jdbc,配置properties(主要是url,user,password,dirver)
-
添加对应版本的maven依赖 mysql:mysql-connector-java:8.0.22
-
完成