文章目录
- 前言
- 部署环境和版本
- 部署准备
- 环境配置
- 下载源码
- 源码修改
- 1、maven 修改为阿里的镜像
- 2、下载apache 相关包比较慢,替换成国内源
- 编译打包
- 全部打包
- 部分编译
- 启动Zeppelin
- 添加配置文件
- 启动
- 查看log
- 遇到问题
- npm 报错 128
- npm 报错 137
- root 安装 web-server 报错
- 启动之后 logs 中有报错 zeppelin-web-angular
- zeppelin 连接 阿里云 MaxCompute(ODPS)
- 1、下载 ODPS JDBC的jar包
- 2、配置odps interpreter
- 3、notebook 使用报错
- zeppelin 配置ldap
- 1、修改zeppelin-site.xml
- 2、配置shiro.ini
- 参考文档
前言
作为一个菜ji,在用源码部署 zeppelin-0.9.0 过程中遇到各种问题, 记录一下
部署环境和版本
- centos7
- zeppelin: 0.9.0
- jdk: 1.7
- Maven: 3.6.3
- node: v12.13.1
- npm: 6.13.1
部署准备
环境配置
在root 权限下 执行
- 安装 jdk (百度)
- 安装 maven
1、wget http://www.eu.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
2、sudo tar -zxf apache-maven-3.6.3-bin.tar.gz -C /usr/local/src
3、编辑 /etc/profile
M2_HOME=/usr/local/src/apache-maven-3.6.3
export M2_HOME
PATH=${PATH}:${M2_HOME}/bin
export PATH
4、source /etc/profile
5、mvn -v 有显示版本 表示成功,如果有问题 自行百度
- 安装 node v12.13.1 , npm (可以先不装,推荐nvm)
- bzip2: yum install bzip2
- yum -y install fontconfig-devel
- yum install epel-release
- yum install R
下载源码
1、git clone https://github.com/apache/zeppelin.git
2、切到 0.9.0 分支
git checkout -b branch-0.9 origin/branch-0.9
ps: 如果github 下载比较慢的话, 可以借道 码云
源码修改
1、maven 修改为阿里的镜像
1、进入安装maven的目录下
vi /usr/local/src/apache-maven-3.6.3/conf/settings.xml
2、 找到 mirors 标签 添加 (在vim 模式下 /mirrors)
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/central</url>
</mirror>
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
3、:wq 保存推出
2、下载apache 相关包比较慢,替换成国内源
cd zeppelin/
1、rlang/pom.xml
- 标签 spark.src.download.url 替换
https://mirrors.tuna.tsinghua.edu.cn/apache/spark/${spark.archive}/${spark.archive}.tgz
- spark.bin.download.url 替换
https://mirrors.tuna.tsinghua.edu.cn/apache/spark/${spark.archive}/${spark.archive}-bin-without-hadoop.tgz
2、spark/pom.xml
- 替换 spark.src.download.ur
https://mirrors.tuna.tsinghua.edu.cn/apache/spark/${spark.archive}/${spark.archive}.tgz
- 替换 spark.bin.download.url
https://mirrors.tuna.tsinghua.edu.cn/apache/spark/${spark.archive}/${spark.archive}-bin-without-hadoop.tgz
3、flink/pom.xml
注意:本人没找到 flink 1.10.0 版本的 国内镜像地址, 所以替换成了1.10.1
- flink.version
1.10.1
- flink.bin.download.url
https://mirrors.tuna.tsinghua.edu.cn/apache/flink/flink-${flink.version}/flink-${flink.version}-bin-scala_${scala.binary.version}.tgz
4、 zeppelin-web/package.json
由于在root 权限下 build zeppelin-web会报错 所有修改一下
bower install --silent --allow-root
见图片
zeppelin-web/package.json 修改图
编译打包
编译打包zeppelin时候 可以全部打包 也可以 部分编译
全部打包
由于打包 时间稍微较长,可以放在后台执行
在zeppelin 目录下 执行
nohup mvn clean package -DskipTests > test.log &
把 打包命令 放在后台执行mvn clean package -DskipTests 输出log 到test.log 文件中
查看 test.log 文件,有打包记录
如果log文件中最后有 build success 表示打包成功
部分编译
参考自: jeff 大佬的文章,文末尾 有链接
- Zeppelin的核心模块
mvn clean install -DskipTests -DskipRat -pl zeppelin-web,zeppelin-server -am # 编译zeppelin核心模块
cd zeppelin-plugins # cd到zeppelin的插件模块
mvn clean package -DskipTests # 编译zeppelin所有的插件模块
- 编译interpreter模块
如何分别编译python,jdbc和spark interpreter。
cd .. # 回到zeppelin根目录
mvn clean package -DskipTests -pl python # 编译python模块
mvn clean package -DskipTests -pl jdbc # 编译jdbc模块
mvn clean package -DskipTests -pl spark/interpreter,spark/scala-2.10,spark/scala-2.11,spark/scala-2.12 -am # 编译spark模块,spark模块和其他模块不太一样,需要指定多个模块,并且加上 ‘-am’,因为spark模块本身是由多个子模块构成。
启动Zeppelin
添加配置文件
cp conf/zeppelin-site.xml.template conf/zeppelin-site.xml
cp conf/zeppelin-env.sh.template conf/zeppelin-env.sh
启动
bin/zeppelin-daemon.sh start
查看log
tail -f logs/*
遇到问题
npm 报错 128
npm ERR! code 128
[ERROR] npm ERR! Command failed: git clone --mirror -q git://github.com/wix/angular-viewport-watch.git /root/.npm/_cacache/tmp/git-clone-68a1f98a/.git
[ERROR] npm ERR! fatal: could not create leading directories of '/root/.npm/_cacache/tmp/git-clone-68a1f98a/.git'
[ERROR] npm ERR!
修改 /root 文件夹的权限 chmod 555 /root
npm 报错 137
内存不足
查看机器上 是否有有占内存的服务,
root 安装 web-server 报错
npm ERR! code ELIFECYCLE
[ERROR] npm ERR! errno 3
Failed to run task: 'npm run build:dist' failed. org.apache.commons.exec.ExecuteException: Process exited with an error: 3 (Exit value: 3) -> [Help 1]
修改 zeppelin-web 里的package.json
"postinstall": "bower install --silent --allow-root",
"build:dist": "npm-run-all prebuild && bower install --silent --allow-root && grunt pre-webpack-dist && webpack && grunt post-webpack-dist",
"build:ci": "npm-run-all prebuild && bower install --silent --allow-root && grunt pre-webpack-ci && webpack && grunt post-webpack-dist",
启动之后 logs 中有报错 zeppelin-web-angular
WARN [2020-05-27 09:19:17,659] ({main} WebAppContext.java[doStart]:533) - Failed startup of context o.e.j.w.WebAppContext@b9b00e0{/next,null,UNAVAILABLE}{/home/zeppelin/zeppelin-web-angular/dist/zeppelin}
java.io.FileNotFoundException: /home/zeppelin/zeppelin-web-angular/dist/zeppelin
at org.eclipse.jetty.webapp.WebInfConfiguration.unpack(WebInfConfiguration.java:663)
at org.eclipse.jetty.webapp.WebInfConfiguration.preConfigure(WebInfConfiguration.java:141)
解决方案
cd zeppelin-web-angular/
npm install && npm run build
注意:需要你机器上下载node和npm
问题: sh: ng: command not found
解决: npm install -g @angular/cli
zeppelin 连接 阿里云 MaxCompute(ODPS)
1、下载 ODPS JDBC的jar包
wget -b https://github.com/aliyun/aliyun-odps-jdbc/releases/download/v3.2.0/odps-jdbc-3.2.0-jar-with-dependencies.jar
2、配置odps interpreter
创建 新的 interpreter,
interpreter group : jdbc
配置
default.url: jdbc:odps:http://service.cn-hangzhou.maxcompute.aliyun.com/api?project=xxxxx
default.driver:com.aliyun.odps.jdbc.OdpsDriver
zeppelin.interpreter.localRepo: /home/xxx/zeppelin/ (项目部署路径)
default.user: xxx (project的账号)
default.password: xxx (project的密码)
依赖
dependencies 添加
Dependencies处的artifact填写之前下载的odps jar 包
(下载odps jar 包的路径)
/home/xxx/odps-jdbc-3.2.0-jar-with-dependencies.jar
保存
restart 重启
3、notebook 使用报错
java.lang.NoSuchMethodError: org.slf4j.helpers.Util.safeGetSystemProperty(Ljava/lang/String;)Ljava/
解决
修改 pom.xml中的slf4j.version
1.7.30 修改为 1.7.5
zeppelin 配置ldap
官方文档配置: https://zeppelin.apache.org/docs/0.9.0-SNAPSHOT/setup/security/shiro_authentication.html#ldap
最好先了解你们公司的 ldap 的结构,然后再去配置
1、修改zeppelin-site.xml
<property>
<name>zeppelin.anonymous.allowed</name>
<value>false</value>
<description>Anonymous user allowed by default</description>
</property>
2、配置shiro.ini
[main]
ldapRealm=org.apache.zeppelin.realm.LdapRealm
ldapRealm.contextFactory.authenticationMechanism=simple
ldapRealm.contextFactory.url=ldap://xx.xx.x.x:389
ldapRealm.userDnTemplate=uid={0},ou=people,dc=haohaozhu,dc=hadoop
# 搜索人的匹配默认, uid={0} 也可以说cn={0}, 看 ldap 是怎么配置的
ldapRealm.pagingSize = 200
ldapRealm.authorizationEnabled=true
ldapRealm.searchBase= dc=haohaozhu,dc=hadoop
ldapRealm.userSearchBase = ou=people,dc=haohaozhu,dc=hadoop
# 在ou=people 下面查找 人
ldapRealm.groupSearchBase = ou=group,dc=haohaozhu,dc=hadoop
# dc=haohaozhu,dc=hadoop 是根 目录 , ou=group 是一个分支,意思 组的概念在这下面查找
ldapRealm.groupObjectClass= posixGroup
# 创建ldap 组 的类名, 可以在ldap 上 查看
ldapRealm.userLowerCase = true
ldapRealm.userSearchScope = subtree;
ldapRealm.groupSearchScope = subtree;
ldapRealm.contextFactory.systemUsername= cn=root,dc=haohaozhu,dc=hadoop
# 登录ldap 的账号
ldapRealm.contextFactory.systemPassword= 123456
# 登录ldap 的密码
ldapRealm.groupSearchEnableMatchingRuleInChain = true
# 如果为true 的话 ,不使用 groupSearchFilter 配置的匹配条件
ldapRealm.rolesByGroup = zeppelinadmin: admin
# zeppelinadmin 是 ldap 上的组的名字, admin 是zeppelin 中 role 的名字
sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager
cookie = org.apache.shiro.web.servlet.SimpleCookie
cookie.name = JSESSIONID
cookie.httpOnly = true
sessionManager.sessionIdCookie = $cookie
securityManager.sessionManager = $sessionManager
securityManager.sessionManager.globalSessionTimeout = 86400000
shiro.loginUrl = /api/login
[roles]
role1 = *
role2 = *
role3 = *
admin = *
[urls]
/api/version = anon
/api/interpreter/setting/restart/** = authc
/api/interpreter/** = authc, roles[admin]
/api/configurations/** = authc, roles[admin]
/api/credential/** = authc, roles[admin]
#/** = anon
/** = authc
可以查看源码,具体看各个配置项的作用
zeppelin-server/src/main/java/org/apache/zeppelin/realm/LdapRealm.java
参考文档
官方文档: https://zeppelin.apache.org/docs/0.9.0-SNAPSHOT/setup/basics/how_to_build.html
大佬Jeff的文档 https://www.jianshu.com/p/e28248fbf897
zeppelin 连接阿里云 odps