如何避免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客户端方式执行的任务
- 先执行kinit命令认证用户。
- 通过操作系统定时任务或者其他定时任务方式定时执行kinit命令认证用户。
- 提交作业执行大数据任务。
- 对于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