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

时间:2014-01-17 18:42:56

标签: 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 ...
   }

});

现在对于安全集群,我还为用户提供了kerberos密码。 有人可以请我提供我需要对上面的代码片段进行的确切更改,以便首先访问KDC并执行kinit然后继续进行HDFS操作

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

提前致谢..

2 个答案:

答案 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.