问题描述
客户通过discover-notebook中的%spark.pyspark解释器,执行报错,报错内容见截图
解决方法
1. /var/log/discoverX/interpreter.sh-XXX.log日志报错Only one of –proxy-user or –principal can be provided
++ /usr/lib/discover/bin/spark-submit --class org.apache.zeppelin.interpreter.remote.RemoteInterpreterServer --driver-class-path ':/usr/lib/notebook//interpreter/spark/*:/usr/lib/notebook//lib/interpreter/*::/usr/lib/notebook//interpreter/spark/zeppelin-spark_2.11-0.8.0-SNAPSHOT.jar:/etc/yarn1/conf' --driver-java-options ' -Dfile.encoding=UTF-8 -Dlog4j.configuration=file:///etc/discover1/conf/notebook/log4j.properties -Dzeppelin.log.file=/var/log/discover1/zeppelin-interpreter-spark-gaopan--nari-08.log' --keytab /home/gaopan/.keytab --principal gaopan@TDH --master 'local[*]' --conf spark.yarn.dist.archives=/usr/lib/discover/R/lib/sparkr.zip --conf spark.app.name=discover1-notebook --proxy-user gaopan /usr/lib/notebook//interpreter/spark/zeppelin-spark_2.11-0.8.0-SNAPSHOT.jar 10.238.0.87 10000 :
Error: Only one of --proxy-user or --principal can be provided.
Run with --help for usage help or --verbose for debug output
Error: Only one of --proxy-user or --principal can be provided.
该报错为 -keytab
,--principal
和proxy-user
不能共存的问题,
需要到manager节点修改/var/lib/transwarp-manager/master/content/meta/services/DISCOVER/transwarp-X.X.X-final/templates/zeppelin-env.sh
(注意这里需要到对应discover镜像版本的目录),添加如下一行
export ZEPPELIN_IMPERSONATE_SPARK_PROXY_USER=false
然后discover组件重新关闭、开启kerberos安全,/etc/discover1/conf/notebook/zeppelin-env.sh
便会刷新。
2. 再次执行,报错提示keytab does not exists
Keytab file: /home/crm/.keytab does not exists
需要到notebook的容器内修改/usr/lib/notebook/bin/interpreter.sh
,位置大概在234行左右,
/home/${ZEPPELIN_IMPERSONATE_USER}/.keytab --principal ${ZEPPELIN_IMPERSONATE_USER}@${TDH_REALM}
建议修改为
/etc/discover1/conf/${ZEPPELIN_IMPERSONATE_USER}.keytab
选择/etc/discover1/conf/这个持久化目录作为keytab文件的存储目录。
然后,将guardian页面下载的对应租户(notebook登陆租户)的keytab文件,放到/etc/discover1/conf/目录下
注意!
这里使用的keytab文件统一是由guardian的租户页面进行下载的,页面下载的方式生成的keytab文件是不包含hostname的,所以在interpreter.sh脚本中我们固话成${ZEPPELIN_IMPERSONATE_USER}@${TDH_REALM}的格式。
discover租户在这里会比较特殊,discover组件关闭、开启kerberos时会重新生成/etc/discover1/conf/discover.keytab。而这个principal是带hostname的格式,所以需要从guardian页面下载使用,要尤其注意!
3. 再次验证,问题解决
步骤2修改的是容器内的非持久化目录,所以需做镜像持久化动作。