参考资料
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<Connection>() {
@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<String,Object> 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
网友评论