SparkKerberos租约到期
  [toc]
# 报错
Spark程序运行报错
# 报错一
2023-02-13 14:42:36,000 [WARN] [LeaseRenewer:hadoop@HDFS8001226] Exception encountered while connecting to the server  (org.apache.hadoop.ipc.Client(org.apache.hadoop.ipc.Client$Connection$1.run:772))
org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.token.SecretManager$InvalidToken): token (token for hadoop: HDFS_DELEGATION_TOKEN owner=hadoop/10.86.50.30@EMR-KE6F8BC5, renewer=hadoop, realUser=, issueDate=1675665753020, maxDate=1676270553020, sequenceNumber=5460, masterKeyId=86) is expired, current time: 2023-02-13 14:42:35,997+0800 expected renewal time: 2023-02-13 14:42:33,020+0800
 1
2
2
# 报错二
java.io.IOException: Lease timeout of 0 seconds expired.
 1
# 原因
在我的krb文件中,我有一个属性renew_lifetime = 7d,即KDC到期。
# 解决方法
# 方法一
对于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.");
    }
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 方法二
对于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
 1
# 参考
https://support.huaweicloud.com/mrs_faq/mrs_03_1167.html
上次更新: 2023/03/10, 17:30:33