我对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 ...
}
});
现在对于安全集群,我还为用户提供了kerberos密码。 有人可以请我提供我需要对上面的代码片段进行的确切更改,以便首先访问KDC并执行kinit然后继续进行HDFS操作
请记住,在我计划部署Java应用程序的环境中,我可能没有在本地安装'kinit',因此从java中调用kinit进程不是一种选择。
提前致谢..
答案 0 :(得分:5)
如果您拥有keytab
超级用户身份的UserGroupInformation
文件,则可以使用org.apache.hadoop.security.SecurityUtil#login(…)
库中提供的hadoop-common
API直接登录你的代码。可以找到完整的API here。
这需要在之前创建远程用户(或更一般地,在任何表单的任何套接字连接到各种服务守护进程之前)之前完成,因为调用会失败没有找到登录凭据。
您无需在执行计算机上安装或提供krb5-workstation
个软件包和实用程序即可使用。
答案 1 :(得分:0)
我有类似的问题。我只是把我在文档中找不到的东西放得很容易。
Ensure your site XML files are in your classpath.