使用票证缓存而不是keytab文件连接到HDFS

t0ybt7op  于 7个月前  发布在  HDFS
关注(0)|答案(1)|浏览(81)

我有两个集群(集群1和集群2),并且都是通过Keratron身份验证进行保护的。我只能从这两个集群读取数据,并且不能更改任何这些集群上的配置文件。
我可以使用keytab文件和已经生成的用户ID访问一个集群,并且有一个keytab文件。
所以,我知道如何在集群1上使用keytab文件和java访问HDFS。

Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://cloudera:8020");
conf.set("hadoop.security.authentication", "kerberos");

UserGroupInformation.setConfiguration(conf);
UserGroupInformation.loginUserFromKeytab("hdfs@CLOUDERA", "/etc/hadoop/conf/hdfs.keytab");

FileSystem fs = FileSystem.get(conf);
FileStatus[] fsStatus = fs.listStatus(new Path("/"));
for (int i = 0; i < fsStatus.length; i++) {
    System.out.println(fsStatus[i].getPath().toString());
}

字符串
问题:我在集群2上没有keytab文件,但我可以使用kinit并从命令行访问HDFS(hdfs dfs -l s/ works)。但是,我想以编程方式访问HDFS。
问:有没有可能在某种程度上使用java访问HDFS而不使用keytab文件?我想如果我可以从命令行使用kinit并访问集群,那么应该有一些方法可以使用java访问而不使用keytab,但kinit生成缓存?
我尝试使用ktutil命令生成keytab文件,但存在预身份验证问题,我无权在配置文件中进行任何更改。

bwleehnv

bwleehnv1#

您可以使用ticket cache登录,您只需要在UserGroupInformation信息中添加该高速缓存路径即可。
更具体地说:
1.运行:kinit -f -p -c /Path/where/your/cache/will/be/created username@your_pricipal
1.更改对该高速缓存的权限。

  1. export KRB5CCNAME=“PATH to your cache”
  2. export HVR_HDFS_KRB_TICKETCACHE=“缓存路径”
    完成后,就可以在代码中添加该高速缓存了:
    Configuration对象中添加所有与Hadoop相关的配置,并添加以下两项:
1. conf.set("hadoop.security.kerberos.ticket.cache.path","Path to your cache")
 2. conf.set("hadoop.security.token.service.use_ip","true")

字符串
它会让你登录。确保你真的导出你的缓存如上所示。使用kdestroy销毁旧的缓存,并创建一个新的。

相关问题