如何使用java API访问安全的kerberized hadoop

aru*_*esh 3 java security hadoop kerberos jaas

我对Kerberos很新.我正在使用共享的Hadoop集群.我的管理员为我提供了用户名和密码以及KDC服务器的位置.

是否可以仅使用JAVA GSS API和Hadoop USerGroupInformation类来访问Hadoop集群.

对于非kerberos hadoop集群,这将是我将使用的代码片段,比如从HDFS读取文件:

String uname = <Some username>;
UserGroupInformation ugi = UserGroupInformation.createRemoteUser(uname);
ugi.doAs(new PrivilegedExceptionAction<Void>(){

   public Void run() throws Exception {

      HdfsConfiguration hdfsConf = new HdfsConfiguration();
      ... SETUP Configuration ...
      FileSystem fs = FileSystem.get(hdfsConf);
      ... Use 'fs' to read/write etc ...
   }

});
Run Code Online (Sandbox Code Playgroud)

现在对于一个安全的群集,我也为用户提供了kerberos密码..有人可以告诉我,我需要对上面的代码片段进行哪些确切的更改才能首先访问KDC并进行kinit然后继续使用HDFS操作

请记住,在我计划部署Java应用程序的环境中,我可能没有在本地安装"kinit",因此从java中调用kinit进程不是一种选择.

提前致谢..

Har*_*h J 5

如果您有超级用户keytab身份的文件,则UserGroupInformation可以使用库中org.apache.hadoop.security.SecurityUtil#login(…)提供的API hadoop-common直接从您的代码登录.完整的API可以在这里找到.

这将需要做之前你创建远程用户(或更一般地,在任何形式的任何套接字连接可以给服务守护程序进行),作为调用,否则失败,被发现没有登录凭据.

您不需要krb5-workstation在执行计算机上安装或可用的软件包和实用程序就可以使用它.