概要描述
Spark 对接开启安全的 inceptor 时,会遇到 ClassNotFound、No such file 等错误,本文就几个常见报错进行说明。
详细说明
-
找不到 io.transwarp.guardian.plugins.inceptor.GuardianHiveAuthorizerFactory 类
报错类似如下:ERROR KeyProviderCache: Could not find uri with key [dfs.encryption.key.provider.uri] to create a keyProvider !! ... RROR SessionState: Error setting up authorization: java.lang.ClassNotFoundException: io.transwarp.guardian.plugins.inceptor.GuardianHiveAuthorizerFactory org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.ClassNotFoundException: ...
该报错是缺少 guardian 相关的 plugins 包,这个包是在 guardian 的 image 里的,所以如果只引入了 inceptor 的 jar 包则可能出现该问题。
需要从 guardian-server 里拷贝该 jar 包并引入。通过如下命令找到 jar 包;$ guardian_server=
kubectl get po -o wide | grep guardian-server | head -1 | awk '{print $1}'
$ kubectl exec -it ${guardian_server} -- grep -nir "io.transwarp.guardian.plugins.inceptor.GuardianHiveAuthorizerFactory" /usr/lib/
比如上图,找到了 /usr/lib/guardian/lib/inceptor-plugin-2.0-transwarp-5.2.2.jar,从 pod 里拷贝出该包并放入 spark 的 classpath 即可。 -
java.lang.NoClassDefFoundError:io/transwarp/guardian/common/exception/GuardianClientException
该错误同样是缺少 guardian 相关的包,可以到 inceptor 的 pod 里找到相关的包并引入,参考命令:$ inceptor_server=
kubectl get po -o wide | grep inceptor-server | head -1 | awk '{print $1}'
$ kubectl exec -it ${inceptor_server} -- find /usr/lib -iname "guardian-*" -print常用的如 guardian-client、guardian-common 等 jar 包
-
报错 Guardian server is not specified in guardian-site.xml
如果是从 manager 页面下载服务配置,或者从 TDH-Client 里取的 inceptor 配置文件,是没有 guardian-site.xml 文件的;需要到集群中手动取下,一般是在 /etc/inceptor*/conf 路径下。
附: 如何从 pod 拷贝文件