更新时间:2022-02-24 GMT+08:00

如何避免Kerberos认证过期?

  • 对于JAVA应用

    在连接HBase、HDFS或者其他大数据组件前,先调用loginUserFromKeytab()创建UGI,然后启动一个定时线程进行检查是否过期并在过期前重新登录。

    private static void startCheckKeytabTgtAndReloginJob() {
            //10分钟循环 达到距离到期时间一定范围就会更新凭证
            ThreadPool.updateConfigThread.scheduleWithFixedDelay(() -> {
                try {
                    UserGroupInformation.getLoginUser().checkTGTAndReloginFromKeytab();
                    logger.warn("get tgt:{}", UserGroupInformation.getLoginUser().getTGT());
                    logger.warn("Check Kerberos Tgt And Relogin From Keytab Finish.");
                } catch (IOException e) {
                    logger.error("Check Kerberos Tgt And Relogin From Keytab Error", e);
                }
            }, 0, 10, TimeUnit.MINUTES);
            logger.warn("Start Check Keytab TGT And Relogin Job Success.");
        }
  • 对于shell方式执行的任务
    1. 先执行kinit命令认证用户。
    2. 通过操作系统定时任务或者其他定时任务方式定时执行kinit命令认证用户。
    3. 提交作业执行大数据任务。
  • 对于Spark作业

    通过spark-shell、spark-submit、spark-sql方式提交作业,可以直接在命令行中指定Keytab和Principal以获取认证,定期更新登录凭证和授权tokens,避免认证过期, 例如:

    spark-shell --principal spark2x/hadoop.<系统域名>@<系统域名> --keytab ${BIGDATA_HOME}/FusionInsight_Spark2x_8.1.0.1/install/FusionInsight-Spark2x-2.4.5/keytab/spark2x/SparkResource/spark2x.keytab --master yarn