zeppelin-0.9.0 源碼安裝, 連接odps,ldap認證

前言

作爲一個菜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 修改圖
tGw3Ue.png

編譯打包

編譯打包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

參考 csdn 文章

參考文檔

官方文檔: https://zeppelin.apache.org/docs/0.9.0-SNAPSHOT/setup/basics/how_to_build.html

大佬Jeff的文檔 https://www.jianshu.com/p/e28248fbf897

zeppelin 連接阿里雲 odps https://juejin.im/entry/57f8a3a70e3dd90057b62fe7

csdn ldap配置: 地址

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章