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