
# 如何避免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_XXX/install/FusionInsight-Spark2x-2.4.5/keytab/spark2x/SparkResource/spark2x.keytab* **--master yarn**
  
 
