安装Hive执行./hive命令时报错:Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
我一开始使用的环境是:
ubuntu-16.04 + hive-1.2.2 + hadoop-2.7.1 + mysql-5.7.30
在进入到hive安装目录准备执行./hive
命令的时候,就出现了如下报错:
Exception in thread "main" java.lang.RuntimeException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:522)
at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:677)
at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:621)
...... 中间省略一大堆报错代码
Caused by: org.datanucleus.store.rdbms.connectionpool.DatastoreDriverNotFoundException: The specified datastore driver ("com.mysql.jdbc.Driver") was not found in the CLASSPATH. Please check your CLASSPATH specification, and the name of the driver.
at org.datanucleus.store.rdbms.connectionpool.AbstractConnectionPoolFactory.loadDriver(AbstractConnectionPoolFactory.java:58)
at org.datanucleus.store.rdbms.connectionpool.BoneCPConnectionPoolFactory.createConnectionPool(BoneCPConnectionPoolFactory.java:54)
at org.datanucleus.store.rdbms.ConnectionFactoryImpl.generateDataSources(ConnectionFactoryImpl.java:238)
... 68 more
网上找了很多方法进行尝试,包括:
1.执行 schematool -dbType mysql -initSchema
,但这好像一般是用来解决hive和mysql版本、配置不一致问题或者hive元数据库未初始化的问题的,反正我试了以后……又报错了。这次是个Failed to get schema version.***SchemaTool failed
错误,然后我又去查这个错,改配置文件什么的,然而试了半天还是解决不了,甚至我用root账户去登也不行,然后就放弃了。
2. 有说是$HIVE_HOME/lib
下的derby-10.11.1.1.jar
问题,把derby-10.11.1.1.jar
换成derby-10.10.2.0.jar
,但是我进到这个目录发现我的就是derby-10.10.2.0.jar
,而且我是要用mysql来保存元数据的,本来就跟derby没关系吧?
3. 在$HIVE_HOME/bin
目录下执行 ./hive --service metastore &
,然后再次执行./hive
.兴奋地尝试后发现,又又又报错了。
4. 另外还有看到说是数据库没有连接上什么的,按着那些方法用改了好几次mysql还是解决不了。
5.最后我的解决办法: 看到一个文章上面写的安装环境和错误都跟我差不多,他说是高版本问题,尝试用hive-0.9.0后就成功了。我就试了下,结果最后还真的成功了……。配置好后在执行./bin/hive
就成功了,执行结果如下:
如果也有这个问题的可以去官网下hive-0.9.0试试,说不定也能行。下载链接:http://archive.apache.org/dist/hive/hive-0.9.0/
不过这也不绝对,因为我在这之前有换过一次mysql的jdbc,之前试的时候我用的是mysql-connector-java-8.0.20
,后面看到一个说是jar包问题的,然后我就换成了mysql-connector-java-5.1.38
,这和我看的实验指导中的配置mysql-connector-java-5.1.40
很接近,所以也有可能是这个jar包的问题。
P.S.执行的时候遇到的另一个报错ls:cannot access ‘/usr/local/spark/lib/spark-assembly-*.jar’:No such file or directory的解决
我装了个spark后又过了几天又重新来搞hive,执行./bin/hive
的时候出现了这个报错:
查资料发现是因为新版的spark中jar包被分散到了不同的位置,所以需要把hive的启动文件进行相应的更改。到$HIVE_HOME目录下执行vim bin/hive
,进入hive的启动文件中,找到图中的位置(我的是在113行):
把sparkAssemblyPath进行修改,改成下图所示这个错误就解决了: