Zeppelin 0.7 原生支援多用戶環境

以前在Zeppelin 支援多用戶-Livy Server篇的時候研究了用Livy Server去達到多用戶的效果
但由於多了一層Proxy很多問題的追蹤都變得很麻煩,包括jar包的部署還必須打包一份到Proxy上

Zeppelin 0.7之後開始支援impersonate可以做到真正的多用戶環境
點我看文件

另外值得一提的是以前YARN環境下,SparkR要在${SPARK_HOME}/conf/spark-defaults.conf下面新增spark.yarn.dist.archives的設定去打包${SPARK_HOME}/R/lib/sparkr.zip才能運行SparkR
這一版本之後Zeppelin會自己打包了
點我看程式
因此如果spark-defaults.conf下面有打包sparkr.zip的設定反而會讓Zeppelin出問題

因此先的版本要先把spark.yarn.dist.archives的設定事先拿掉

#spark.yarn.dist.archives /usr/hdp/2.4.2.0-258/spark/R/lib/sparkr.zip#sparkr

雖說Zeppelin 0.7還沒正式release,但是github上已經有0.7的branch了,可以先抓下來玩玩
https://github.com/apache/zeppelin

0.7版的設定跟0.6版差了不少,要注意
首先是shiro.ini LDAP的設定類別改了

...
ldapRealm = org.apache.zeppelin.realm.LdapGroupRealm
## search base for ldap groups (only relevant for LdapGroupRealm):
ldapRealm.contextFactory.environment[ldap.searchBase] = dc=COMPANY,dc=COM
ldapRealm.contextFactory.url = ldap://ldap.test.com:389
ldapRealm.userDnTemplate = uid={0},ou=Users,dc=COMPANY,dc=COM
ldapRealm.contextFactory.authenticationMechanism = SIMPLE
...

在來是zeppelin-env.sh下面新增了impersonate相關的設定

...
export ZEPPELIN_IMPERSONATE_CMD='sudo -H -u ${ZEPPELIN_IMPERSONATE_USER} bash -c '
export ZEPPELIN_IMPERSONATE_SPARK_PROXY_USER=false

新增上面兩行,可以讓zeppelin interpreter切換成特定user去執行
而ZEPPELIN_IMPERSONATE_SPARK_PROXY_USER要設定成false,不然spark會帶--proxy-user去執行
這樣反而會讓--proxy-user變成特定user而出問題

接下來精彩的地方是interpreter可以設定Per User
還可以設定User Impersonate,讓interpreter變成特定使用者身份去執行

有了這個功能之後,某方面來說就不再需要Livy Server了

更棒的是user可以針對自己的環境去重啟interpreter

在0.6之前如果某個user把Spark弄到當機就只能找管理者重開Zeppelin的所有Interpreter,現在有了這個功能
使用者再出問題就能自己重開自己的環境了

不過現在zeppelin 0.7正式版還沒出來,現在自己抓下來編譯還是有不少bug
至少這是個可以期待的版本

comments powered by Disqus