You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HDP 3.1集群作业因Kerberos凭证问题执行失败求助

HDP 3.1集群Kerberos认证失败导致作业执行异常

问题现象

启用NameNode HA、通过AD集成Kerberos安全认证的HDP 3.1集群中,作业执行失败,核心报错为找不到Kerberos TGT凭证,导致Hive Metastore连接失败,具体日志如下:

23/01/12 05:03:13 信息 HiveMetaStoreClient: HMSC::open(): 未找到委托令牌。创建基于KERBEROS的thrift连接。
23/01/12 05:03:13 错误 TSaslTransport: SASL协商失败
javax.security.sasl.SaslException: GSS初始化失败 [由GSSException引起: 未提供有效凭证(机制级别: 未找到任何Kerberos tgt)]
    在 com.sun.security.sasl.gsskerb.GssKrb5Client.evaluateChallenge(GssKrb5Client.java:211)
    在 org.apache.thrift.transport.TSaslClientTransport.handleSaslStartMessage(TSaslClientTransport.java:94)
    在 org.apache.thrift.transport.TSaslTransport.open(TSaslTransport.java:271)
    在 org.apache.thrift.transport.TSaslClientTransport.open(TSaslClientTransport.java:37)
    在 org.apache.hadoop.hive.metastore.security.TUGIAssumingTransport$1.run(TUGIAssumingTransport.java:51)
    在 org.apache.hadoop.hive.metastore.security.TUGIAssumingTransport$1.run(TUGIAssumingTransport.java:48)
    在 java.security.AccessController.doPrivileged(Native Method)
    在 javax.security.auth.Subject.doAs(Subject.java:422)
    在 org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1730)
    在 org.apache.hadoop.hive.metastore.security.TUGIAssumingTransport.open(TUGIAssumingTransport.java:48)
    在 org.apache.hadoop.hive.metastore.HiveMetaStoreClient.open(HiveMetaStoreClient.java:544)
    在 org.apache.hadoop.hive.metastore.HiveMetaStoreClient.<init>(HiveMetaStoreClient.java:225)
    在 org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient.<init>(SessionHiveMetaStoreClient.java:96)
    在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    在 java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    在 org.apache.hadoop.hive.metastore.utils.JavaUtils.newInstance(JavaUtils.java:84)
    在 org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.<init>(RetryingMetaStoreClient.java:95)
    在 org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.getProxy(RetryingMetaStoreClient.java:148)
    在 org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.getProxy(RetryingMetaStoreClient.java:119)
    在 org.apache.hadoop.hive.ql.metadata.Hive.createMetaStoreClient(Hive.java:4656)
    在 org.apache.hadoop.hive.ql.metadata.Hive.getMSC(Hive.java:4724)
    在 org.apache.hadoop.hive.ql.metadata.Hive.getMSC(Hive.java:4704)
    在 org.apache.hadoop.hive.ql.metadata.Hive.getAllFunctions(Hive.java:4995)
    在 org.apache.hadoop.hive.ql.metadata.Hive.reloadFunctions(Hive.java:311)
    在 org.apache.hadoop.hive.ql.metadata.Hive.registerAllFunctionsOnce(Hive.java:294)
    在 org.apache.hadoop.hive.ql.metadata.Hive.<init>(Hive.java:464)
    在 org.apache.hadoop.hive.ql.metadata.Hive.create(Hive.java:393)
    在 org.apache.hadoop.hive.ql.metadata.Hive.getInternal(Hive.java:380)
    在 org.apache.hadoop.hive.ql.metadata.Hive.get(Hive.java:351)
    在 org.apache.spark.sql.hive.client.HiveClientImpl.org$apache$spark$sql$hive$client$HiveClientImpl$$client(HiveClientImpl.scala:249)
    在 org.apache.spark.sql.hive.client.HiveClientImpl$$anonfun$withHiveState$1.apply(HiveClientImpl.scala:271)
    在 org.apache.spark.sql.hive.client.HiveClientImpl.liftedTree1$1(HiveClientImpl.scala:216)
    在 org.apache.spark.sql.hive.client.HiveClientImpl.retryLocked(HiveClientImpl.scala:215)
    在 org.apache.spark.sql.hive.client.HiveClientImpl.withHiveState(HiveClientImpl.scala:261)
    在 org.apache.spark.sql.hive.client.HiveClientImpl.databaseExists(HiveClientImpl.scala:345)
    在 org.apache.spark.sql.hive.HiveExternalCatalog$$anonfun$databaseExists$1.apply$mcZ$sp(HiveExternalCatalog.scala:195)
    在 org.apache.spark.sql.hive.HiveExternalCatalog$$anonfun$databaseExists$1.apply(HiveExternalCatalog.scala:195)
    在 org.apache.spark.sql.hive.HiveExternalCatalog$$anonfun$databaseExists$1.apply(HiveExternalCatalog.scala:195)
    在 org.apache.spark.sql.hive.HiveExternalCatalog.withClient(HiveExternalCatalog.scala:97)
    在 org.apache.spark.sql.hive.HiveExternalCatalog.databaseExists(HiveExternalCatalog.scala:194)
    在 org.apache.spark.sql.internal.SharedState.externalCatalog$lzycompute(SharedState.scala:114)
    在 org.apache.spark.sql.internal.SharedState.externalCatalog(SharedState.scala:102)
    在 org.apache.spark.sql.internal.SharedState.globalTempViewManager$lzycompute(SharedState.scala:138)
    在 org.apache.spark.sql.internal.SharedState.globalTempViewManager(SharedState.scala:133)
    在 org.apache.spark.sql.hive.HiveSessionStateBuilder$$anonfun$2.apply(HiveSessionStateBuilder.scala:54)
    在 org.apache.spark.sql.hive.HiveSessionStateBuilder$$anonfun$2.apply(HiveSessionStateBuilder.scala:54)
    在 org.apache.spark.sql.catalyst.catalog.SessionCatalog.globalTempViewManager$lzycompute(SessionCatalog.scala:91)
    在 org.apache.spark.sql.catalyst.catalog.SessionCatalog.globalTempViewManager(SessionCatalog.scala:91)
    在 org.apache.spark.sql.catalyst.catalog.SessionCatalog.isTemporaryTable(SessionCatalog.scala:702)
    在 org.apache.spark.sql.catalyst.analysis.Analyzer$ResolveRelations$.isRunningDirectlyOnFiles(Analyzer.scala:681)
    在 org.apache.spark.sql.catalyst.analysis.Analyzer$ResolveRelations$.resolveRelation(Analyzer.scala:615)
    在 org.apache.spark.sql.catalyst.analysis.Analyzer$ResolveRelations$$anonfun$apply$8.applyOrElse(Analyzer.scala:647)
    在 org.apache.spark.sql.catalyst.analysis.Analyzer$ResolveRelations$$anonfun$apply$8.applyOrElse(Analyzer.scala:640)
    在 org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$transformUp$1.apply(TreeNode.scala:289)
    在 org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$transformUp$1.apply(TreeNode.scala:289)
    在 org.apache.spark.sql.catalyst.trees.CurrentOrigin$.withOrigin(TreeNode.scala:70)
    在 org.apache.spark.sql.catalyst.trees.TreeNode.transformUp(TreeNode.scala:288)
    在 org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$3.apply(TreeNode.scala:286)
    在 org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$3.apply(TreeNode.scala:286)
    在 org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$4.apply(TreeNode.scala:306)
    在 org.apache.spark.sql.catalyst.trees.TreeNode.mapProductIterator(TreeNode.scala:187)
    在 org.apache.spark.sql.catalyst.trees.TreeNode.mapChildren(TreeNode.scala:304)
    在 org.apache.spark.sql.catalyst.trees.TreeNode.transformUp(TreeNode.scala:286)
    在 org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$3.apply(TreeNode.scala:286)
    在 org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$3.apply(TreeNode.scala:286)
    在 org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$4.apply(TreeNode.scala:306)
    在 org.apache.spark.sql.catalyst.trees.TreeNode.mapProductIterator(TreeNode.scala:187)
    在 org.apache.spark.sql.catalyst.trees.TreeNode.mapChildren(TreeNode.scala:304)
    在 org.apache.spark.sql.catalyst.trees.TreeNode.transformUp(TreeNode.scala:286)
    在 org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$3.apply(TreeNode.scala:286)
    在 org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$3.apply(TreeNode.scala:286)
    在 org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$4.apply(TreeNode.scala:306)
    在 org.apache.spark.sql.catalyst.trees.TreeNode.mapProductIterator(TreeNode.scala:187)
    在 org.apache.spark.sql.catalyst.trees.TreeNode.mapChildren(TreeNode.scala:304)
    在 org.apache.spark.sql.catalyst.trees.TreeNode.transformUp(TreeNode.scala:286)
    在 org.apache.spark.sql.catalyst.analysis.Analyzer$ResolveRelations$.apply(Analyzer.scala:640)
    在 org.apache.spark.sql.catalyst.analysis.Analyzer$ResolveRelations$.apply(Analyzer.scala:586)
    在 org.apache.spark.sql.catalyst.rules.RuleExecutor$$anonfun$execute$1$$anonfun$apply$1.apply(RuleExecutor.scala:87)
    在 org.apache.spark.sql.catalyst.rules.RuleExecutor$$anonfun$execute$1$$anonfun$apply$1.apply(RuleExecutor.scala:84)
    在 scala.collection.LinearSeqOptimized$class.foldLeft(LinearSeqOptimized.scala:124)
    在 scala.collection.immutable.List.foldLeft(List.scala:84)
    在 org.apache.spark.sql.catalyst.rules.RuleExecutor$$anonfun$execute$1.apply(RuleExecutor.scala:84)
    在 org.apache.spark.sql.catalyst.rules.RuleExecutor$$anonfun$execute$1.apply(RuleExecutor.scala:76)
    在 scala.collection.immutable.List.foreach(List.scala:381)
    在 org.apache.spark.sql.catalyst.rules.RuleExecutor.execute(RuleExecutor.scala:76)
    在 org.apache.spark.sql.catalyst.analysis.Analyzer.org$apache$spark$sql$catalyst$analysis$Analyzer$$executeSameContext(Analyzer.scala:124)
    在 org.apache.spark.sql.catalyst.analysis.Analyzer.execute(Analyzer.scala:118)
    在 org.apache.spark.sql.catalyst.analysis.Analyzer.executeAndCheck(Analyzer.scala:103)
    在 org.apache.spark.sql.execution.QueryExecution.analyzed$lzycompute(QueryExecution.scala:57)
    在 org.apache.spark.sql.execution.QueryExecution.analyzed(QueryExecution.scala:55)
    在 org.apache.spark.sql.execution.QueryExecution.assertAnalyzed(QueryExecution.scala:47)
    在 org.apache.spark.sql.Dataset$.ofRows(Dataset.scala:74)
    在 org.apache.spark.sql.SparkSession.sql(SparkSession.scala:642)
    在 com.virginvoyages.dimension.SurveyQuestionsDimLoad$.main(SurveyQuestionsDimLoad.scala:53)
    在 com.virginvoyages.dimension.SurveyQuestionsDimLoad.main(SurveyQuestionsDimLoad.scala)
    在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    在 java.lang.reflect.Method.invoke(Method.java:498)
    在 org.apache.spark.deploy.yarn.ApplicationMaster$$anon$4.run(ApplicationMaster.scala:721)
引起原因: GSSException: 未提供有效凭证(机制级别: 未找到任何Kerberos tgt)
    在 sun.security.jgss.krb5.Krb5InitCredential.getInstance(Krb5InitCredential.java:147)
    在 sun.security.jgss.krb5.Krb5MechFactory.getCredentialElement(Krb5MechFactory.java:122)
    在 sun.security.jgss.krb5.Krb5MechFactory.getMechanismContext(Krb5MechFactory.java:187)
    在 sun.security.jgss.GSSManagerImpl.getMechanismContext(GSSManagerImpl.java:224)
    在 sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:212)
    在 sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:179)
    在 com.sun.security.sasl.gsskerb.GssKrb5Client.evaluateChallenge(GssKrb5Client.java:192)
    ... 101 个更多调用
23/01/12 05:03:13 警告 HiveMetaStoreClient: 连接到MetaStore服务器失败...
23/01/12 05:03:13 信息 HiveMetaStoreClient: 等待5秒后尝试下一次连接。
23/01/12 05:03:18 信息 HiveMetaStoreClient: 尝试使用URI thrift://Metastorehostname:9083连接到metastore
23/01/12 05:03:18 信息 HiveMetaStoreClient: HMSC::open(): 未找到委托令牌。创建基于KERBEROS的thrift连接。
23/01/12 05:03:18 错误 TSaslTransport: SASL协商失败
javax.security.sasl.SaslException: GSS初始化失败 [由GSSException引起: 未提供有效凭证(机制级别: 未找到任何Kerberos tgt)]
    在 com.sun.security.sasl.gsskerb.GssKrb5Client.evaluateChallenge(GssKrb5Client.java:211)
    在 org.apache.thrift.transport.TSaslClientTransport.handleSaslStartMessage(TSaslClientTransport.java:94)
    在 org.apache.thrift.transport.TSaslTransport.open(TSaslTransport.java:271)
    在 org.apache.thrift.transport.TSaslClientTransport.open(TSaslClientTransport.java:37)
    在 org.apache.hadoop.hive.metastore.security.TUGIAssumingTransport$1.run(TUGIAssumingTransport.java:51)
    在 org.apache.hadoop.hive.metastore.security.TUGIAssumingTransport$1.run(TUGIAssumingTransport.java:48)
    在 java.security.AccessController.doPrivileged(Native Method)
    在 javax.security.auth.Subject.doAs(Subject.java:422)

排查与解决步骤

  • 检查作业提交用户的Kerberos凭证
    • 执行klist查看是否存在有效TGT凭证,若没有则执行kinit <AD用户名>手动获取;批量作业需通过keytab自动获取:kinit -kt /path/to/用户密钥表文件.keytab <AD用户名>
  • 验证Hive Metastore的Kerberos配置
    • 检查hive-site.xml中hive.metastore.sasl.enabled是否设为true,hive.metastore.kerberos.principal是否配置正确(格式通常为hive/_HOST@AD_REALM)
  • 确认集群节点的Kerberos配置一致性
    • 检查所有节点的/etc/krb5.conf文件,确保AD的KDC地址、REALM名称等配置一致,且能正常解析KDC服务器
  • 检查YARN凭证传递配置
    • 确认YARN已启用Kerberos认证,yarn-site.xml中yarn.resourcemanager.principal等相关配置正确,保证作业提交时凭证能传递给ApplicationMaster
  • 验证AD用户权限与状态
    • 确认AD用户未被锁定、密码未过期,且拥有访问Hive Metastore的权限,Kerberos主体在AD中存在有效条目

内容的提问来源于stack exchange,提问作者kant

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 20:10:24