Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何仅使用JavaAPI访问安全的kerberized hadoop_Java_Security_Hadoop_Kerberos_Jaas - Fatal编程技术网

如何仅使用JavaAPI访问安全的kerberized hadoop

如何仅使用JavaAPI访问安全的kerberized hadoop,java,security,hadoop,kerberos,jaas,Java,Security,Hadoop,Kerberos,Jaas,我对Kerberos很陌生。我使用的是共享Hadoop集群。我的管理员向我提供了用户名、密码以及KDC服务器的位置 是否可以仅使用JavaGSSAPI和HadoopUserGroupInformation类来访问Hadoop集群 对于非kerberos hadoop集群,这将是我用来从HDFS读取文件的代码片段: String uname = <Some username>; UserGroupInformation ugi = UserGroupInformation.create

我对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 ...
   }

});
String uname=;
UserGroupInformation ugi=UserGroupInformation.createRemoteUser(uname);
ugi.doAs(新特权接受行动){
public Void run()引发异常{
HdfsConfiguration hdfsConf=新的HdfsConfiguration();
…设置配置。。。
FileSystem fs=FileSystem.get(hdfsConf);
…使用“fs”读/写等。。。
}
});
现在,对于一个安全集群,我还为用户提供了kerberos密码。。 有人能告诉我,我需要对上面的代码片段做哪些具体更改,以便首先访问KDC并执行kinit,然后继续执行HDFS操作

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


提前感谢..

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

这需要在创建远程用户之前完成(或者更一般地说,在任何形式的套接字连接到各种服务守护进程之前),否则调用将失败,并且找不到登录凭据


您不需要在执行机器上安装或提供
krb5工作站
软件包和实用程序,就可以让它工作。

我也遇到过类似的问题。我会把我在文档中找不到的东西放进去


确保您的站点XML文件位于类路径中。

如果在从客户端执行java程序之前无法将其kinit,则无法针对安全群集部署作业,除非您在程序中构建kerberos客户端。我很好奇,如果我的服务器位于kerberos群集之外,它会工作吗?这意味着启动API的服务器没有被kerberised,它只需要指定提供的keytab就可以工作吗?