2017-08-21 7 views
0

私はKerberos対応クラスタ(Cloudera)上でSparkジョブを実行していますが、ユーザーのKerberos IDをログに記録したいと考えています。ジョブ。Apache Sparkジョブでの現在のKerberosユーザーの特定

(keytabファイル、jaas.confファイルを使用し、起動スクリプトにkinitを呼び出すため、これはジョブを起動するローカルLinuxユーザーのIDではないことに注意してください。プリンシパルはkinitにkeytabと共に渡されますが、実際のSparkジョブ自体にログインすることができれば幸いです。そのため、ジョブを手動で起動しても、実行されたIDは確実にわかります。

いくつかの答えは、次のお勧め:

import java.security.{AccessController,Principal} 
import javax.security.auth.Subject 

val acc = AccessController.getContext 
val sub = Subject.getSubject(acc) 
val principals = sub.getPrincipals 

が、返さsubnullあるので、これは動作しません。

答えて

3

UserGroupInformationクラスを参照する必要があります。

ログインしたユーザーを取得するには、使用することができます:

import org.apache.hadoop.security.UserGroupInformation 

val user = UserGroupInformation.getLoginUser 

res6: org.apache.hadoop.security.UserGroupInformation = [email protected] (auth:KERBEROS) 
関連する問題