我正在启用 Kerberos 的集群 (Cloudera( 上运行 Spark 作业,并希望能够记录用户在任何给定作业运行的 Kerberos 身份。
(请注意,这不是启动作业的本地 Linux 用户的身份,因为我们在启动脚本中使用密钥表文件、jaas.conf
文件和调用kinit
。我们可以在启动脚本中记录一个身份,因为我们知道主体与keytab一起传递给kinit
,但是能够在实际的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
,所以这不起作用。
你需要看看UserGroupInformation
类。
要获取登录用户,您可以使用:
import org.apache.hadoop.security.UserGroupInformation
val user = UserGroupInformation.getLoginUser
res6: org.apache.hadoop.security.UserGroupInformation = USER@REALM (auth:KERBEROS)