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



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

但是返回的subnull,所以这不起作用。

你需要看看UserGroupInformation类。

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

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

最新更新