Ошибка HBase kerberos при запуске spark streaming через 24 часа

#hbase #spark-streaming #kerberos

#hbase #spark-streaming #kerberos

Вопрос:

Приложение spark streaming запускается в Yarn и получает доступ к HBase с помощью Kerberos. Он запускается через 24 часа, он будет зависать с приведенными ниже ошибками:

 Caused by: GSSException: No valid credentials provided (Mechanism level: Requested start time is later than end time (11) - Requested start time is later than end time)
    at sun.security.jgss.krb5.Krb5Context.initSecContext(Krb5Context.java:710)
    at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:248)
    at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:179)
    at com.sun.security.sasl.gsskerb.GssKrb5Client.evaluateChallenge(GssKrb5Client.java:193)
    ... 25 more
Caused by: KrbException: Requested start time is later than end time (11) - Requested start time is later than end time
    at sun.security.krb5.KrbTgsRep.<init>(KrbTgsRep.java:73)
    at sun.security.krb5.KrbTgsReq.getReply(KrbTgsReq.java:192)
    at sun.security.krb5.KrbTgsReq.sendAndGetCreds(KrbTgsReq.java:203)
    at sun.security.krb5.internal.CredentialsUtil.serviceCreds(CredentialsUtil.java:309)
    at sun.security.krb5.internal.CredentialsUtil.acquireServiceCreds(CredentialsUtil.java:115)
    at sun.security.krb5.Credentials.acquireServiceCreds(Credentials.java:454)
    at sun.security.jgss.krb5.Krb5Context.initSecContext(Krb5Context.java:641)
    ... 28 more
Caused by: KrbException: Identifier doesn't match expected value (906)
    at sun.security.krb5.internal.KDCRep.init(KDCRep.java:143)
    at sun.security.krb5.internal.TGSRep.init(TGSRep.java:66)
    at sun.security.krb5.internal.TGSRep.<init>(TGSRep.java:61)
    at sun.security.krb5.KrbTgsRep.<init>(KrbTgsRep.java:55)
    ... 34 more
Kerberos username [yarn]:
 

Основными кодами аутентификации kerberos являются:

 val ugi:UserGroupInformation = UserGroupInformation.loginUserFromKeytabAndReturnUGI(principal,keytab)
ugi.checkTGTAndReloginFromKeytab()
p1 = ugi.doAs(new PrivilegedAction[Iterator[Row]] {
  override def run(): Iterator[Row] = {
      dataprocess() // error occurs in hbase access in here
    }
  }
)
 

Комментарии:

1. Это потому, что ваш default_lifetime and ticket_lifetime установлен на 24 часа в вашем krb5.conf. Попробуйте увеличить его до более чем 24 часов.

2. Попробуйте передать --principal --keytab параметры и. Spark должен автоматически обновлять билеты Kerberos таким образом. Если вы продолжите получать проблемы, добавьте "spark.hadoop.fs.hdfs.impl.disable.cache": "true" .