kerberos认证下hadoop的java应用程序超时分析

参考资料
https://cloud.tencent.com/developer/article/1419270
https://issues.apache.org/jira/browse/HADOOP-10786

背景

我们的云平台项目涉及到了没有认证以及包括kerberos认证的情况。
但是在认证后一天后老是爆Failed to find any Kerberos tgt相关的kerberos错误

相关代码

我先上相关的报错代码

LOG.info("Spark-HIVE数据源开始进行kerberos认证。。。");
UserGroupInformation UGI = null;
UGI = UserGroupInformation.loginUserFromKeytabAndReturnUGI(ssoUserName, localKeyTabPath);
UGI.checkTGTAndReloginFromKeytab();
LOG.info("Spark-HIVE数据源kerberos认证成功");
Connection conn = UGI.doAs(new PrivilegedAction() {
	@Override
	public Connection run() {
		try {
			//Connection connection = utils.hiveDataSource.getConnection();
			//hushunpeng加多租户多连接池对应关系
			Connection connection =HiveDataSetConfig.hiveDataSource( (String)infoMap.get("hadoop.spark.jdbcurl"),ssoUserName,"").getConnection();
			//设置队列名称
			if(infoMap.get("yarn.queue.name") == null || "".equals(String.valueOf(infoMap.get("yarn.queue.name")))){
				Map yarnInfo = DateSetHDFSUtils.getCurrentUserYarnInfo();
				String yarnQueueName = String.valueOf(yarnInfo.get("yarn.queueName"));
				infoMap.put("yarn.queue.name",yarnQueueName);
			}

这里我只展示了部分代码,看起来其实没有大的问题,UGI.checkTGTAndReloginFromKeytab();的作用其实就是检查认证是否到期然后再继续认证。
然而向项目运行1天后还是会爆 Failed to find any Kerberos tgt 等认证相关的错误。

解决

我展开了对于这一块的研究。发现了这篇文章https://cloud.tencent.com/developer/article/1419270,
解决了我的困扰,原来UserGroupInformation的reloginFromKeytab方法在hadoop的某些版本没有生效。(大家会说上面代码没有引用相关啊,其实是在checkTGTAndReloginFromKeytab方法内部调用的)
所以这的解决办法是
1、jdk改成1.7
2、将应用程序依赖的hadoop版本换成2.6.1或 2.7.0或 3.0.0-alpha1

你可能感兴趣的:(hadoop)