确定Apache Spark作业中的当前Kerberos用户

时间:2017-08-21 16:01:32

标签: hadoop apache-spark kerberos jaas

我在启用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

但返回的subnull,因此无效。

1 个答案:

答案 0 :(得分:3)

您需要查看UserGroupInformation课程。

要获取登录用户,您可以使用:

import org.apache.hadoop.security.UserGroupInformation

val user = UserGroupInformation.getLoginUser

res6: org.apache.hadoop.security.UserGroupInformation = USER@REALM (auth:KERBEROS)