当我连接到 ireport 时,如果说在 hive shell 中显示表,则会出现此错误:
元数据错误:java.lang.RuntimeException:无法实例化 org.apache.hadoop.hive.metastore.HiveMetaStoreClient 失败:执行错误,从 org.apache.hadoop.hive.ql.exec.DDLTask 返回代码 1
您是否已将包含元数据数据库的JDBC 驱动程序的 jar 复制到 Hive 的 lib 目录中?
例如,如果您使用MySQL来保存元数据数据库,则需要复制
mysql-connector-java-5.1.22-bin.jar
进入$HIVE_HOME/lib
.
这为我解决了同样的错误。
无法实例化 org.apache.hadoop.hive.metastore.HiveMetaStoreClient
通常,这表明 Hive元存储服务未正确启动。但是您粘贴的错误消息没有包含足够的信息来定位问题的确切原因。
确实,有很多原因可能导致此错误,因为其他作者发布的答案都与特定方面有关。
我的建议是:运行hive --service metastore
命令以获得更详细和更有针对性的错误消息,然后相应地解决问题。您也可以参考/tmp/user_name/hive.log日志文件。
错误消息在 Hive 中很棒。当我将凭据添加到 conf/hive-site.xml 中时,我没有注意到预先存在的用户名/密码元素,所以当我添加自己的凭据时,它们并没有被使用,我最终得到了与上面相同的非描述消息。
如果您运行 metatool 命令,它会跟踪堆栈并得到这个,在我的例子中,它指出了真正的原因。我希望这对其他人有帮助:
mfellows@matt.mit /usr/local/hive-0.11.0-bin $ bin/metatool -listFSRoot
Initializing HiveMetaTool..
13/06/05 21:44:43 INFO metastore.ObjectStore: ObjectStore, initialize called
13/06/05 21:44:43 ERROR DataNucleus.Plugin: Bundle "org.eclipse.jdt.core" requires "org.eclipse.core.resources" but it cannot be resolved.
13/06/05 21:44:43 ERROR DataNucleus.Plugin: Bundle "org.eclipse.jdt.core" requires "org.eclipse.core.runtime" but it cannot be resolved.
13/06/05 21:44:43 ERROR DataNucleus.Plugin: Bundle "org.eclipse.jdt.core" requires "org.eclipse.text" but it cannot be resolved.
13/06/05 21:44:43 INFO DataNucleus.Persistence: Property datanucleus.cache.level2 unknown - will be ignored
13/06/05 21:44:43 INFO DataNucleus.Persistence: Property javax.jdo.option.NonTransactionalRead unknown - will be ignored
13/06/05 21:44:43 INFO DataNucleus.Persistence: ================= Persistence Configuration ===============
13/06/05 21:44:43 INFO DataNucleus.Persistence: DataNucleus Persistence Factory - Vendor: "DataNucleus" Version: "2.0.3"
13/06/05 21:44:43 INFO DataNucleus.Persistence: DataNucleus Persistence Factory initialised for datastore URL="jdbc:mysql://localhost/hive_metastore" driver="com.mysql.jdbc.Driver" userName="APP"
13/06/05 21:44:43 INFO DataNucleus.Persistence: ===========================================================
13/06/05 21:44:44 ERROR Datastore.Schema: Failed initialising database.
Access denied for user 'APP'@'localhost' (using password: YES)
org.datanucleus.exceptions.NucleusDataStoreException: Access denied for user 'APP'@'localhost' (using password: YES)
at org.datanucleus.store.rdbms.ConnectionFactoryImpl$ManagedConnectionImpl.getConnection(ConnectionFactoryImpl.java:536)
一种可能性是您的 hadoop 没有运行。我在本地做一个简单的单节点 hadoop 集群时遇到了同样的问题。每次启动计算机时,您都必须手动启动 hadoop 节点,然后 hive 才能连接到它们。
尝试运行 $HADOOP_HOME/bin/stop-all.sh
如果输出显示没有节点要停止,这意味着你的 hadoop 没有启动,在这种情况下,运行
$HADOOP_HOME/bin/start-all.sh
然后蜂巢,你应该很好去。
(这是使用默认的 derby 数据库。显然,如果您使用的是 mysql,那么您也可以从某些连接器配置中获取此错误(请参阅其他答案))。
编辑:实际上我发现的另一件事是,每当您启动 hive 时,Hive 都需要创建一个 metastore_db 目录,但它会在运行 hive 的路径中创建它。如果您在运行 hive 的目录中没有写入权限,则可能会遇到上述错误。要解决此问题,您可以在 hive-site.xml 中设置一个配置,以使该目录成为绝对目录而不是相对目录。
看这里:
感谢上面关于 JDBC 驱动程序的回答。我将 Oracle 用于 Hive Metastore,因此:
$ cp $ORACLE_HOME/jdbc/lib/ojdbc6.jar $HIVE_HOME/lib/ojdbc6.jar
有人告诉我,如果我们的 hive 控制台没有正确终止,通常我们会得到这个异常。修复:
运行 jps 命令,查找“RunJar”进程并使用 kill -9 命令将其杀死