美文网首页
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