我在启用Kerberos的群集(Cloudera)上运行Spark作业,并且希望能够为任何给定的作业运行记录用户的Kerberos身份。
(请注意,这不是启动作业的本地Linux用户的身份,因为我们使用keytab文件,jaas.conf
文件,并在启动脚本中调用kinit
。我们可以记录启动脚本中的身份,因为我们知道传递给kinit
的主体以及keytab,但是能够在实际的Spark作业本身内部登录会很好,这样即使手动启动作业,我们可靠地知道它运行的身份。)
一些答案表明以下内容:
import java.security.{AccessController,Principal}
import javax.security.auth.Subject
val acc = AccessController.getContext
val sub = Subject.getSubject(acc)
val principals = sub.getPrincipals
但返回的sub
为null
,因此无效。
答案 0 :(得分:3)
您需要查看UserGroupInformation
课程。
要获取登录用户,您可以使用:
import org.apache.hadoop.security.UserGroupInformation
val user = UserGroupInformation.getLoginUser
res6: org.apache.hadoop.security.UserGroupInformation = USER@REALM (auth:KERBEROS)