【发布时间】:2016-03-30 03:36:16
【问题描述】:
最近我们每月遇到一次标题中描述的问题。在 Metastore 节点上,我们已经安装并启动了 ntpd 服务以与 kerberos 服务器同步时间。节点上的 krb5.conf 如下所示:
[libdefaults]
default_realm = 示例.COM
dns_lookup_realm = 真
dns_lookup_kdc = 真
ticket_lifetime = 24h
renew_lifetime = 7天
可转发 = true
因此,metastore 上的时间与 kerberos 服务器不同步(>=5 分钟)导致问题或网络阻塞的可能性似乎较小。
从metastore日志看,“Clock skew too great”异常记录时间是乱序的,比如,
2016-01-16 18:18:48,071 错误 [pool-3-thread-63735]
2016-01-16 19:07:03,699 错误 [pool-3-thread-63798]
2016-01-16 19:06:55,998 错误 [pool-3-thread-63796]
2016-01-16 19:06:41,653 错误 [pool-3-thread-63812]
2016-01-16 19:04:28,659 错误 [pool-3-thread-63806]
2016-01-16 19:04:13,937 错误 [pool-3-thread-63804]
2016-01-16 19:02:19,312 错误 [pool-3-thread-63809]
2016-01-16 19:02:13,115 错误 [pool-3-thread-63794]
2016-01-16 19:02:06,028 错误 [pool-3-thread-63800]
2016-01-16 19:01:50,767 错误 [pool-3-thread-63795]
2016-01-16 18:59:36,926 错误 [pool-3-thread-63810]
2016-01-16 18:59:36,394 错误 [pool-3-thread-63797]
异常堆栈:
2016-01-16 18:59:36,394 错误 [pool-3-thread-63797]: transport.TSaslTransport (TSaslTransport.java:open(296)) - SASL 协商失败 javax.security.sasl.SaslException:GSS 启动失败 [由 GSSException 引起:在 GSS-API 级别未指定故障(机制级别:时钟偏差太大(37))] 在 com.sun.security.sasl.gsskerb.GssKrb5Server.evaluateResponse(GssKrb5Server.java:177) 在 org.apache.thrift.transport.TSaslTransport$SaslParticipant.evaluateChallengeOrResponse(TSaslTransport.java:509) 在 org.apache.thrift.transport.TSaslTransport.open(TSaslTransport.java:264) 在 org.apache.thrift.transport.TSaslServerTransport.open(TSaslServerTransport.java:41) 在 org.apache.hadoop.hive.thrift.HadoopThriftAuthBridge$HiveSaslServerTransportFactory.getTransport(HadoopThriftAuthBridge.java:172) 在 org.apache.hadoop.hive.thrift.HadoopThriftAuthBridge20S$Server$TUGIAssumingTransportFactory$1.run(HadoopThriftAuthBridge20S.java:678) 在 org.apache.hadoop.hive.thrift.HadoopThriftAuthBridge20S$Server$TUGIAssumingTransportFactory$1.run(HadoopThriftAuthBridge20S.java:675) 在 java.security.AccessController.doPrivileged(本机方法) 在 javax.security.auth.Subject.doAs(Subject.java:356) 在 org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1536) 在 org.apache.hadoop.hive.thrift.HadoopThriftAuthBridge20S$Server$TUGIAssumingTransportFactory.getTransport(HadoopThriftAuthBridge20S.java:675) 在 org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:189) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 在 java.lang.Thread.run(Thread.java:744) 原因:GSSException:在 GSS-API 级别未指定故障(机制级别:时钟偏差太大 (37)) 在 org.apache.thrift.transport.TSaslServerTransport.handleSaslStartMessage(TSaslServerTransport.java:125) 在 org.apache.thrift.transport.TSaslTransport.open(TSaslTransport.java:253) 在 org.apache.thrift.transport.TSaslServerTransport.open(TSaslServerTransport.java:41) 在 org.apache.hadoop.hive.thrift.HadoopThriftAuthBridge$HiveSaslServerTransportFactory.getTransport(HadoopThriftAuthBridge.java:172) ... 10 更多环境:
java版本“1.7.0_45” Java HotSpot(TM) 64 位服务器 VM(内部版本 24.51-b03,混合模式) hive-0.13.1.2.1.10.0-hdp如果我想找出根本原因,我该怎么办?有什么建议么? 非常感谢。
【问题讨论】:
-
您是否尝试过使用 NTP 同步所有地方的时间
-
是的,我们之前尝试过。当异常发生时,事实证明 Metastore 太忙而无法响应请求。我们必须重新启动它。
-
您是否检查过 NecronoKerberoMicon,即(用于常见错误消息)steveloughran.gitbooks.io/kerberos_and_hadoop/content/sections/… 和(用于调试)steveloughran.gitbooks.io/kerberos_and_hadoop/content/sections/…
-
非常感谢。从 Metastore 日志中检查,“时钟偏差太大”让我很惊讶,这意味着当前的身份验证请求在 5 分钟后带有时间戳,或者与 kerberos 服务器相比转发。不幸的是,直到下次出现同样的问题时,我们还没有获得 kerberos 调试信息。我现在尝试找出潜在的原因并重新创建问题。
-
感谢@Konstantin V. Salikhov 和 Samson Scharfrichter,问题可能是由于其他一些集群用户尝试连接元存储。
标签: java hive kerberos metastore