文章目录

  • 前言
  • 部署环境和版本
  • 部署准备
  • 环境配置
  • 下载源码
  • 源码修改
  • 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 修改图

LDAP 连接释放时间_spark

编译打包

编译打包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