确定apachespark作业中的当前kerberos用户

ckx4rj1h  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(309)

我正在启用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 ,所以这不起作用。

ogq8wdun

ogq8wdun1#

你得看看 UserGroupInformation 班级。
要获取登录用户,可以使用:

import org.apache.hadoop.security.UserGroupInformation

val user = UserGroupInformation.getLoginUser

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

相关问题