什么是Apache Zeppelin
- 数据抽取(定时调度的慎用,建议用专业的ETL和调度工具)
- 数据挖掘
- 数据转换 (定时调度的慎用,建议用专业的ETL和调度工具)
- 数据分析
- 数据即时查询及可视化
官网:http://zeppelin.apache.org/
讲解版本:0.9.0
下载地址:传送门
安装Zeppelin
下载及解压
其实博主主要时用来写spark,spark-sql以及flink的,因为我忍那个黑框很久了,所以一般我就下载在安装了spark,flink及hdfs的节点上,以下操作以Linux为背景;
#切换到我的软件安装目录tools目录下
cd /data/tools/
#创建zeppelin,并进入
mkdir zeppelin
cd zeppelin
#下载apache zeppelin 0.9.0,没网的集群可以下载好上传上来也一样
wget https://mirror.bit.edu.cn/apache/zeppelin/zeppelin-0.9.0/zeppelin-0.9.0-bin-all.tgz
#解呀apache zeppelin tar包
tar -zxvf zeppelin-0.9.0-bin-all.tgz
#解压后该目录下会有folder zeppelin-0.9.0-bin-all
#设置一个软链,方便以后访问及版本升级,,配置环境变量及其它地方引用都用软链路径,以后版本升级只要切换软链即可
ln -sf /data/tools/zeppelin/zeppelin-0.9.0-bin-all current
配置zeppelin-site.xml
zeppelin的配置文件包含在/data/tools/zeppelin/zeppelin-0.9.0-bin-all current/conf/
下,先配置zeppelin-site.xml
;
#不难发现zeppelin-site.xml没有,需要cp出来
cp zeppelin-site.xml.template zeppelin-site.xml
#修改zeppelin-site.xml
vim zeppelin-site.xml
#将以下属性做修改
#zeppelin.server.addr改成该节点的ip或者hostname,因为你可能不在本机器访问zeppelin
<property>
<name>zeppelin.server.addr</name>
<value>10.250.19.28</value>
<description>Server binding address</description>
</property>
#默认的8080端口比较常用,改成一个不常用同的且不会和你集群冲突的
<property>
<name>zeppelin.server.port</name>
<value>18080</value>
<description>Server port.</description>
</property>
#限制输出数据大小的byte单位,改大点,改到1G吧
<property>
<name>zeppelin.interpreter.output.limit</name>
<value>1024000000</value>
<description>Output message from interpreter exceeding the limit will be truncated</description>
</property>
#wq! 保存退出编辑
配置zeppelin-env.sh
zeppelin-env.sh
主要交代一些你需要使用的语言即时查询的HOME
路径,这里以配置Spark为例,前提,需要你集群的spark-shell,spark-sql
,本身是没问题的,不然能成功才怪!
这里采用spark yarn client
模式,其它模式只要更换SPARK_SUBMIT_OPTIONS
参数即可,参数规格可以参考官网Spark Interpreter for Apache Zeppelin或者国人整理的Zeppelin中文文档网;
#zeppelin-env.sh 也是默认不存在的,建议cp出来
cp zeppelin-env.sh.template zeppelin-env.sh
#vim zeppelin-env.sh,然后在最后面添加以下组件的home路径
#根据自己的组件路劲来填写,不要乱搞哈,坑死人不偿命!
#根据自己的组件路劲来填写,不要乱搞哈,坑死人不偿命!
#根据自己的组件路劲来填写,不要乱搞哈,坑死人不偿命!
export JAVA_HOME=/data/tools/java/jdk1.8.0_211
export SPARK_HOME=/data/tools/spark/current
export HADOOP_HOME=/data/tools/hadoop/current
export HADOOP_CONF_DIR=/data/tools/hadoop/current/etc/hadoop
export SPARK_SUBMIT_OPTIONS="--master yarn --deploy-mode client --executor-memory 8G --executor-cores 5 --num-executors 4 --queue etl"
注意:1.在zeppelin上的每一种语言都有一个自己的Interpreter(你可以称呼它为解释器,解析器,理解就行),每种解释器的配置都不同,对于解释器的配置,可以写在zeppelin-env.sh
,如上配置,也可以配置在等下启动的zeppelin网页上的Interpreter
,如图2;点击然后切换到图3去配置相关属性;区别:写在zeppelin-env.sh
,则全局生效;配置在网页的Interpreter。只有运行代码的时候根据你选择的Interpreter来选择配置,换句话说如果你有两个spark集群,两个spark集群版本还不一样,那你可以在web端配置Interpreter属性,你可以加两个spark的Interpreter出来,不要重名即可,然后代码运行的时候选择你想要的Interpreter;那我这里没有两个spark集群,我就直接写在zeppelin-env.sh
,其它Interpreter也有这个原理,个人建议,如果没有特殊需求,最好配置在zeppelin-env.sh
;坑少!
注意:2.Interpreter 的spark
模块,新加一个zeppelin.spark.maxResult=1000000
设置导出的行数为100万吧,这个和之前zeppelin-site.xml
的zeppelin.interpreter.output.limit
属性相互呼应的,也就是说如果zeppelin.interpreter.output.limit
太小,则会截断输出内容,同理,如果输出行数zeppelin.spark.maxResult
太小,也会截断输出内容,只会输出这些行数前的;
注意:3.如果zeppelin支持的编程语言的home folder被你设置了环境变量,则zeppelin是会默认使用环境变量的;如图4,因为我python用了环境变量;
而为什么我的Java根目录要重设呢,因为zeppelin-0.9.0有个需要Apache Zeppelin requires either Java 8 update 151 or newer
,如下shell代码,什么意思呢,其实要求jdk 8
,并且8里面的小版本也也要求,不能低于151,所以你看我的重新定义的路径是/data/tools/java/jdk1.8.0_211
,是211小版本;注意哈,大坑来了,改了这里还不够,你要找到/data/tools/zeppelin/current/bin/common.sh
,改掉shell的java根目录,具体代码如图5,请写成自己的满足zeppelin版本的java根目录,当然如果你卸载你jdk,重新装高版本,然后再配置成环境变量,也是没问题的,因为我的是再生产环境有这个瑕疵,我不敢改,怕殃及池鱼;
org.apache.zeppelin.interpreter.InterpreterException: java.io.IOException: Fail to launch interpreter process:
Apache Zeppelin requires either Java 8 update 151 or newer
at org.apache.zeppelin.interpreter.remote.RemoteInterpreter.open(RemoteInterpreter.java:134)
at org.apache.zeppelin.interpreter.remote.RemoteInterpreter.getFormType(RemoteInterpreter.java:298)
at org.apache.zeppelin.notebook.Paragraph.jobRun(Paragraph.java:433)
at org.apache.zeppelin.notebook.Paragraph.jobRun(Paragraph.java:75)
at org.apache.zeppelin.scheduler.Job.run(Job.java:172)
at org.apache.zeppelin.scheduler.AbstractScheduler.runJob(AbstractScheduler.java:130)
at org.apache.zeppelin.scheduler.RemoteScheduler$JobRunner.run(RemoteScheduler.java:159)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.IOException: Fail to launch interpreter process:
Apache Zeppelin requires either Java 8 update 151 or newer
如果你不在乎权限,就可以启动Zeppelin了,启动命令如下;
# 切换到zeppelin根目录
cd /data/tools/zeppelin/current
# 启动
bin/zeppelin-daemon.sh start
# 停止
bin/zeppelin-daemon.sh stop
# 重启 本质是先stop再start,该命令不管zeppelin是否在运行都可以使用,不在运行会报 zeppelin is not running
bin/zeppelin-daemon.sh restart
# 出现以下字样,则说明ok,有问题则cd /data/tools/zeppelin/current/logs 查看异常原因
Zeppelin stop [ OK ]
Zeppelin start [ OK ]
打开浏览器,输入在zeppelin-site.xml
配置的网页端口10.250.19.28:18080
,即可出现如图6界面
配置权限管理shiro.ini
zeppelin-0.9.0不用其它操作,直接编辑shiro.ini
文件;
官网参考文档:Apache Shiro authentication for Apache Zeppelin
# 切换到/data/tools/zeppelin/current/conf
cd /data/tools/zeppelin/current/conf/
# cp 出来shiro.ini
cp shiro.ini.template shiro.ini
#编辑shiro.ini
vim shiro.ini
# 把文件内的shiro.ini的admin打开
#等号前面的是user,等号后面的是密码。可以按你的意愿来修改,建议改改吧,不然只要懂zeppelin的就能猜到你的账号和密码,不好吧
[users]
# List of users with their password allowed to access Zeppelin.
# To use a different strategy (LDAP / Database / ...) check the shiro doc at http://shiro.apache.org/configuration.html#Configuration-INISections
# To enable admin user, uncomment the following line and set an appropriate password.
admin = password1, admin
user1 = password2, role1, role2
user2 = password3, role3
user3 = password4, role2
权限解析:主要是shiro.ini
内的如下数据/api/version
表是查看api的version,这里的api其实就是呼应网页上右上角小倒立三角形展开的内容的权限,如图7,anon
表示所有人都能看,即不需要权限;/api/cluster/address
表示集群地址;authc
表示需要用户名密码权限,就是你上面编辑的,roles[admin]
表示需要admin角色才可以操作,/**
代表所有操作,其它的自己以此类推;
[urls]
# This section is used for url-based security. For details see the shiro.ini documentation.
#
# You can secure interpreter, configuration and credential information by urls.
# Comment or uncomment the below urls that you want to hide:
# anon means the access is anonymous.
# authc means form based auth Security.
#
# IMPORTANT: Order matters: URL path expressions are evaluated against an incoming request
# in the order they are defined and the FIRST MATCH WINS.
#
# To allow anonymous access to all but the stated urls,
# uncomment the line second last line (/** = anon) and comment the last line (/** = authc)
#
/api/version = anon
/api/cluster/address = anon
# Allow all authenticated users to restart interpreters on a notebook page.
# Comment out the following line if you would like to authorize only admin users to restart interpreters.
/api/interpreter/setting/restart/** = authc
/api/interpreter/** = authc, roles[admin]
/api/notebook-repositories/** = authc, roles[admin]
/api/configurations/** = authc, roles[admin]
/api/credential/** = authc, roles[admin]
/api/admin/** = authc, roles[admin]
#/** = anon
/** = authc
更多的权限配置请参考官网的权限页,还有其它类型的权限认证,这里就不一一解释了;
启动Zeppelin
启动指令如下;
# 切换到zeppelin根目录
cd /data/tools/zeppelin/current
# 启动
bin/zeppelin-daemon.sh start
# 停止
bin/zeppelin-daemon.sh stop
# 重启 本质是先stop再start,该命令不管zeppelin是否在运行都可以使用,不在运行会报 zeppelin is not running
bin/zeppelin-daemon.sh restart
# 出现以下字样,则说明ok,有问题则cd /data/tools/zeppelin/current/logs 查看异常原因
Zeppelin stop [ OK ]
Zeppelin start [ OK ]
# jps一下守护进程,如下
jps
12956 ZeppelinServer
配置好权限认证的zeppelin网页如下图8;之前的右上角anonymous
任何人能登录变成了Login
,点击Login
弹出账号密码界面图9,根据你配置的账号密码输入后进入开始使用;
Apache Zeppelin-0.9.0安装配置Spark-2.3.3到此为止,下一篇讲述spark和sparksql及python在Apache Zeppelin的基本使用Apache Zeppelin支持Spark,python的小试牛刀;