如何使用JavaAPI访问安全的KerberizedHadoop

ippsafx7  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(326)

我对kerberos还很陌生。我正在使用一个共享hadoop集群。我的管理员为我提供了用户名和密码以及kdc服务器的位置。
是否可以仅使用javagssapi和hadoopusergroupinformation类来访问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 ...
   }

});

现在对于一个安全集群,我还为用户提供了kerberos密码。。有没有人能告诉我,我需要对上面的代码片段做什么样的修改,以便首先访问kdc并执行kinit,然后继续hdfs操作
请记住,在我计划部署java应用程序的环境中,我可能没有在本地安装“kinit”,因此从java内部调用kinit进程不是一个选项。
提前谢谢。。

iswrvxsc

iswrvxsc1#

如果你有 keytab 文件的身份 UserGroupInformation 超级用户,您可以使用 org.apache.hadoop.security.SecurityUtil#login(…) 中提供的api hadoop-common 库,直接从代码登录。完整的api可以在这里找到。
这需要在创建远程用户之前完成(或者更一般地说,在对各种服务守护进程进行任何形式的套接字连接之前),否则调用将失败,并且找不到登录凭据。
你不需要 krb5-workstation 在执行机器上安装或提供的程序包和实用程序。

lkaoscv7

lkaoscv72#

我也有类似的问题。我会把我找不到的东西放在文件里。 Ensure your site XML files are in your classpath.

相关问题