Java访问Kerberos认证的HDFS文件系统

前几天搭建了Kerberos认证的HDFS文件系统,今天打算写文章来介绍一下,用Java来访问经过Kerberos加密的HDFS文件系统,在这之前,需要在KDC生成keytab文件,然后把/etc/krb5.conf文件下载,并且放到项目中。

一、项目pom依赖配置

<dependency>
	<groupId>org.apache.hadoop</groupId>
	<artifactId>hadoop-common</artifactId>
	<version>2.6.0</version>
</dependency>
<dependency>
	<groupId>org.apache.hadoop</groupId>
	<artifactId>hadoop-hdfs</artifactId>
	<version>2.6.0</version>
</dependency>

二、Java访问代码

import java.security.PrivilegedExceptionAction;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.security.UserGroupInformation;

public class HDFSKerberos {

	public static void main(String[] args) throws Exception {

		String principal = "hdfs";  //Kerberos Principal,如果不然REALM,则使用krb5.conf默认的
		String keytabFile = "src/main/resources/hdfs.keytab";   //KDC生成的keytab文件

		Configuration conf = new Configuration();
		conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
		conf.set("fs.defaultFS", "hdfs://hadoop60:8020");  //HDFS地址

		//需要设置krb5.conf文件
		System.setProperty("java.security.krb5.conf", "src/main/resources/krb5.conf");

		UserGroupInformation.loginUserFromKeytab(principal, keytabFile);
		UserGroupInformation ugi = UserGroupInformation.getLoginUser();

		//使用UserGroupInformation来获FileSystem
		FileSystem fs = ugi.doAs(new PrivilegedExceptionAction<FileSystem>() {
			@Override
			public FileSystem run() throws Exception {
				return FileSystem.get(conf);
			}
		});

		FileStatus[] fileStatus = fs.listStatus(new Path("/"));
		for (FileStatus fst : fileStatus) {
			System.out.println(fst.getPath());
		}
	}
}

三、实现截图

实现截图

四、遇到错误

1.Can't get Kerberos realm

这是因为没有加载Kerberos的配置文件引起的,解决方法,把KDC服务器的/etc/krb5.conf下载配置即可

五、总结

Java在访问Kerberos认证系统的HDFS时,需要用principal,和生成的keytab文件,然后生成UserGroupInformation对象,保存生成的Ticket,但是每次登陆的时候需要用到UserGroupInformation,但有时不需要也可以,因为UserGroupInformation中的Subject对象是绑定在当前的线程中,若不是同一个线程,则每次都需要重新登陆,但是通过UserGroupInformation.doAs方法,它在验证的时候,会切换线判断是否登陆。

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值