我对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进程不是一个选项。
提前谢谢。。
2条答案
按热度按时间iswrvxsc1#
如果你有
keytab
文件的身份UserGroupInformation
超级用户,您可以使用org.apache.hadoop.security.SecurityUtil#login(…)
中提供的apihadoop-common
库,直接从代码登录。完整的api可以在这里找到。这需要在创建远程用户之前完成(或者更一般地说,在对各种服务守护进程进行任何形式的套接字连接之前),否则调用将失败,并且找不到登录凭据。
你不需要
krb5-workstation
在执行机器上安装或提供的程序包和实用程序。lkaoscv72#
我也有类似的问题。我会把我找不到的东西放在文件里。
Ensure your site XML files are in your classpath.