美文网首页
kerberos认证下hadoop的java应用程序超时分析

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

作者: 早点起床晒太阳 | 来源:发表于2020-05-09 20:57 被阅读0次

参考资料
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

相关文章

网友评论

      本文标题:kerberos认证下hadoop的java应用程序超时分析

      本文链接:https://www.haomeiwen.com/subject/lbanwhtx.html