概述
2013
年,ZEPL
(以前称为NFLabs
,是一家韩国的数据分析公司)启动了Zeppelin
项目。
2014
年12
月23
日,Zeppelin
项目成为Apache Software Foundation
中的孵化项目。
2016
年6
月18
日,Zeppelin
项目从Apache
的孵化项目毕业,成为Apache Software Foundation
的顶级项目。
2020
年1
月19
日,Apache Zepplin
已经到了0.8.2GA
,0.9.0-SNAPSHOT
。
什么是Apache Zeppelin
Apache Zeppelin
是一个基于Web
的交互式数据分析开源框架,提供了数据分析、数据可视化等功能,类似于Jupyter Notebook
,不过功能比Jupyter Notebook
强大很多,她是属于企业级产品,支持超过20
种后端语言,比如Java/Scala/Python/SQL/MarkDown/Shell
等。开发者可以自定义开发更多的解释器为Zeppelin
添加执行引擎,官方现在支持的执行引擎有Spark/JDBC/Python/Alluxio/Beam/Cassandra/Elasticsearch/Flink/HBase/HDFS/Hive/Kylin
/Livy/MarkDown/Neo4j/Pig/PostgreSQL/R
等。
Apache Zeppelin 架构简介
Apache Zeppelin
的架构比较简单直观(如下图所示),总共分为3
层
Zeppelin
前端Zeppelin Server
Zeppelin Interpreter
` Zeppelin前端是基于
AngularJS。
Zeppelin Server是一个基于
Jetty的轻量级
Web Server`,主要负责以下一些功能:
- 登陆权限管理
Zeppelin
配置信息管理Interpreter
配置信息和生命周期管理Note
存储管理- 插件机制管理
Zeppelin Interpreter
组件是指各个计算引擎在Zeppelin
这边的适配。比如Python
,Spark
,Flink
等等。每个Interpreter
都运行在一个JVM
进程里,这个JVM
进程可以是和Zeppelin Server
在同一台机器上(默认方式),也可以运行在Zeppelin
集群里的其他任何机器上或者K8s
集群的一个Pod
里,这个由Zeppelin
的不同InterpreterLauncher
插件来实现。InterpreterLauncher
是Zeppelin
的一种插件类型。
组件之间的通信机制
Zeppelin
前端和Zeppelin Server
之间的通信机制主要有Rest api
和WebSocket
两种。Zeppelin Server
和Zeppelin Interpreter
是通过Thrift RPC
来通信,而且他们彼此之间是双向通信,Zeppelin Server
可以向Zeppelin Interpreter
发送请求,Zeppelin Interpreter
也可以向Zeppelin Server
发送请求。
源码编译安装Apache Zeppelin
Apache Zeppelin
官方提供了源码包和二进制包,可以根据自己的需要下载相关的包,二进制包是包含所有的解释器,如果你只需要用到其中的几种可以通过源码编译来定制化安装。
mvn clean package -DskipTests -Phadoop-2.6 -Dhadoop.version=2.6.0 -P build-distr -Dhbase.hbase.version=1.2.0 -Dhbase.hadoop.version=2.6.0
二进制安装Apache Zeppelin
[hadoop@hadoop001 sourcecode]$ tar -zxvf zeppelin-0.8.2-bin-all.tgz -C ~/app/
#修改配置文件
[hadoop@hadoop001 conf]$ pwd
/home/hadoop/app/zeppelin-0.8.2-bin-all/conf
[hadoop@hadoop001 conf]$ cp zeppelin-env.sh.template zeppelin-env.sh
[hadoop@hadoop001 conf]$ vim zeppelin-env.sh
export JAVA_HOME=/usr/java/jdk1.8.0_144
export HADOOP_CONF_DIR=/home/hadoop/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop
export MASTER=yarn
export SPARK_HOME=/home/hadoop/app/spark-2.4.2-bin-2.6.0-cdh5.7.0
export SPARK_SUBMIT_OPTIONS="--jars /home/hadoop/lib/mysql-connector-java-5.1.46-bin.jar"
export FLINK_HOME=/home/hadoop/app/flink-1.7.2
export HBASE_HOME=/home/hadoop/app/hbase-1.2.0-cdh5.7.0
# 修改端口,主机名
[hadoop@hadoop001 conf]$ cp zeppelin-site.xml.template zeppelin-site.xml
[hadoop@hadoop001 conf]$vim zeppelin-site.xml
<property>
<name>zeppelin.server.addr</name>
<value>192.168.100.111</value>
<description>Server binding address</description>
</property>
<property>
<name>zeppelin.server.port</name>
<value>9090</value>
<description>Server port.</description>
</property>
启动Zeppelin的用户认证
Apache Zeppelin
默认是以匿名用户访问的,即没有用户权限要求,如要实现用户权限限制,则需要修改zeppelin-site.xml
和shiro
配置文件。
# 修改zeppelin-site.xml配置文件,将以下配置项中的true改成false
<property>
<name>zeppelin.anonymous.allowed</name>
<value>false</value>
<description>Anonymous user allowed by default</description>
</property>
# 复制conf目录下的shiro.ini.template 为 shiro.ini , 将shiro.ini 的[user]块中的内容修改为以下内容:
[hadoop@hadoop001 conf]$ cp shiro.ini.template shiro.ini
[hadoop@hadoop001 conf]$ vim shiro.ini
[users]
admin = admin
user1 = password2, role1, role2
user2 = password3, role3
user3 = password4, role2
.
.
.
[urls]
/api/version = anon
#/api/interpreter/setting/restart/** = authc, roles[admin,hive]
#/api/interpreter/** = authc, roles[admin,hive]
#/api/configurations/** = authc, roles[admin,hive]
#/api/credential/** = authc, roles[admin,hive]
#/** = anon
/** = authc
启动Apache Zeppelin
[hadoop@hadoop001 ~]$ cd app/zeppelin-0.8.2-bin-all/
[hadoop@hadoop001 zeppelin-0.8.2-bin-all]$ bin/zeppelin-daemon.sh start
Log dir doesn't exist, create /home/hadoop/app/zeppelin-0.8.2-bin-all/logs
Pid dir doesn't exist, create /home/hadoop/app/zeppelin-0.8.2-bin-all/run
Zeppelin start [ OK ]
[hadoop@hadoop001 zeppelin-0.8.2-bin-all]$
创建 mysql notebook
- 往下拉,选择
jdbc
需要填写的有5
个地方
default.driver
default.password
default.url
default.user
artifact
查询mysql里面的数据
Apache Zepplin 对接Apache Spark
当出现 java.lang.NoSuchMethodError: io.netty.buffer.PooledByteBufAllocator.defaultNumHeapArena()I
解决办法:
# cd $ZEPPELIN_HOME/lib
# mv netty-all-4.0.23.Final.jar netty-all-4.0.23.Final.jar_bak
# cp $SPARK_HOME/jars/netty-all-4.1.17.Final.jar $ZEPPELIN_HOME/lib
当出现
com.fasterxml.jackson.databind.JsonMappingException: Incompatible Jackson version: 2.8.11-1
解决办法:
# cd $ZEPPELIN_HOME/lib
# mv jackson-databind-2.8.11.1.jar jackson-databind-2.8.11.1.jar_bak
# cp $SPARK_HOME/jars/jackson-databind-2.6.7.1.jar $ZEPPELIN_HOME/lib
Spark 样例代码
Spark SQL
SparkSQL处理HDFS上的数据
Apark Zeppelin
里面自带Apache Spark
,并且自带了sc
,用 Apache Zeppelin
还是比直接用Spark Shell
或者Spark SQL
来调试方便不少。
Apache Zeppelin 操作Shell
Apache Zeppelin 操作MarkDown
Apache Zeppelin
里面自带了 MarkDown
Apache Zeppelin 集成 Apache Flink
Zeppelin
将创建6
个变量来表示flink
的入口点
senv
(StreamExecutionEnvironment),benv
(ExecutionEnvironment)stenv
(StreamTableEnvironment for blink planner)btenv
(BatchTableEnvironment for blink planner)stenv_2
(StreamTableEnvironment for flink planner)btenv_2
(BatchTableEnvironment for flink planner)
Apache Zeppelin 集成 Apache HBase
[hadoop@hadoop001 hbase]$ pwd
/home/hadoop/app/zeppelin-0.8.2-bin-all/interpreter/hbase
[hadoop@hadoop001 hbase]$ mkdir hbase_jar
[hadoop@hadoop001 hbase]$ mv hbase*.jar hbase_jar/
[hadoop@hadoop001 hbase]$ mv hadoop*.jar hbase_jar/
[hadoop@hadoop001 hbase]$ mv zookeeper-3.4.6.jar hbase_jar/
[hadoop@hadoop001 hbase]$
[hadoop@hadoop001 hbase]$ cp -f /home/hadoop/app/hbase-1.2.0-cdh5.7.0/lib/*.jar /home/hadoop/app/zeppelin-0.8.2-bin-all/interpreter/hbase/
- 编辑
interpreter.json
,位置/home/hadoop/app/zeppelin-0.8.2-bin-all/interpreter/hbase/interpreter.json
,修改hbase.home
。
"hbase.home": {
"name": "hbase.home",
"value": "/home/hadoop/app/hbase-1.2.0-cdh5.7.0/",
"type": "string"
},
-
重启
Apache Zeppelin
cd /home/hadoop/app/zeppelin-0.8.2-bin-all/bin zeppelin-daemon.sh restart
-
测试
Apache Zeppelin 集成 HDFS
Apache Zeppelin 集成 Apache Hive
- 添加
hive
的Interpreters
- 启动
hive2
[hadoop@hadoop001 lib]$ hiveserver2 &
- 测试
Apache Zeppelin 集成 Elasticsearch
- 可以直接用
Elasticsearch
的Interpreters
- 也可以直接用
shell
的Interpreters
Apache Zeppelin VS Jupyter Notebook
Jupyter Notebook
是IPython Notebook
的演变版,更出名。
对比 | Zeppelin | Jupyter |
---|---|---|
开发语言 | python | java |
GithubStar | 4.6k | 6.8k |
安装 | 简单 | 简单 |
诞生 | 2012年 | 2013年 |
支持Spark | 支持 | 支持 |
支持Flink | 支持 | 暂不支持 |
多用户 | 支持 | 不支持 |
权限 | 支持 | 不支持 |
Apache Zeppelin
功能强大,适合于企业级应用,而Jupyter
更适用于个人测试学习,Apache Zeppelin
集成了Flink/Spark
等大数据知名产品,而Jupyter
未集成Flink
,功能远不如Apache Zeppelin
强大。