我在使用kerberos的集群上遇到了一个问题,hive无法启动。
症状:
- 服务启动成功(未停止)
- 在Ambari出现了一个警告,提到Hive metastore失败
- 在命令行上启动hive不成功(它一直挂着)
- 通过直线,我能够看到元数据,但没有得到实际数据
我在/var/log/hive/hivemetastore.log
中发现以下错误2016-08-29 10:12:49,047 ERROR [main]: metastore.HiveMetaStore (HiveMetaStore.java:main(5934)) - Metastore Thrift Server threw an exception...
org.apache.hadoop.hive.thrift.DelegationTokenStore$TokenStoreException: Error creating path /hive/cluster/delegation/METASTORE/keys
at org.apache.hadoop.hive.thrift.ZooKeeperTokenStore.ensurePath(ZooKeeperTokenStore.java:166)
at org.apache.hadoop.hive.thrift.ZooKeeperTokenStore.initClientAndPaths(ZooKeeperTokenStore.java:236)
at org.apache.hadoop.hive.thrift.ZooKeeperTokenStore.init(ZooKeeperTokenStore.java:469)
at org.apache.hadoop.hive.thrift.HadoopThriftAuthBridge$Server.startDelegationTokenSecretManager(HadoopThriftAuthBridge.java:444)
at org.apache.hadoop.hive.metastore.HiveMetaStore.startMetaStore(HiveMetaStore.java:6015)
at org.apache.hadoop.hive.metastore.HiveMetaStore.main(HiveMetaStore.java:5930)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
Caused by: org.apache.zookeeper.KeeperException$AuthFailedException: KeeperErrorCode = AuthFailed for /hive/cluster/delegation/METASTORE/keys
at org.apache.zookeeper.KeeperException.create(KeeperException.java:123)
at org.apache.zookeeper.KeeperException.create(KeeperException.java:51)
at org.apache.zookeeper.ZooKeeper.create(ZooKeeper.java:783)
at org.apache.curator.framework.imps.CreateBuilderImpl$11.call(CreateBuilderImpl.java:691)
at org.apache.curator.framework.imps.CreateBuilderImpl$11.call(CreateBuilderImpl.java:675)
at org.apache.curator.RetryLoop.callWithRetry(RetryLoop.java:107)
at org.apache.curator.framework.imps.CreateBuilderImpl.pathInForeground(CreateBuilderImpl.java:672)
at org.apache.curator.framework.imps.CreateBuilderImpl.protectedPathInForeground(CreateBuilderImpl.java:453)
at org.apache.curator.framework.imps.CreateBuilderImpl.forPath(CreateBuilderImpl.java:443)
at org.apache.curator.framework.imps.CreateBuilderImpl.forPath(CreateBuilderImpl.java:423)
at org.apache.curator.framework.imps.CreateBuilderImpl$3.forPath(CreateBuilderImpl.java:257)
at org.apache.curator.framework.imps.CreateBuilderImpl$3.forPath(CreateBuilderImpl.java:205)
at org.apache.hadoop.hive.thrift.ZooKeeperTokenStore.ensurePath(ZooKeeperTokenStore.java:160)
... 11 more
请注意,我实际上尝试了几种方法,所以我不确定这是否是完整的解决方案,但这里是最后一步,我认为这是关键的一步:
经过长时间的搜索,我间接找到了这个网站:https://community.hortonworks.com/articles/49040/hive-metastore-crashes-on-nullpointerexception-wit.html
下面是帮助我解决问题的相关片段:
这是一个已知的问题,正在跟踪以下Hortonworks bug:
https://hortonworks.jira.com/browse/bug - 42602处理:
将hive.cluster. delegate .token.store.class设置如下:
hive.cluster.delegation.token.store.class = org.apache.hadoop.hive.thrift.DBTokenStore
如果使用Ambari,这个设置可以通过点击Hive来改变服务,导航到"配置"选项卡,然后的"高级Hive-site"部分修改参数蜂巢配置。保存修改并从Ambari用户重新启动Hive界面提示。
如果不使用ambari,此设置可以位于/etc/hive/conf/hive-site.xml文件。确保进行了此更改集群中所有适用的节点。更改完成后Hive服务必须重启