3

当我连接到 ireport 时,如果说在 hive shell 中显示表,则会出现此错误:

元数据错误:java.lang.RuntimeException:无法实例化 org.apache.hadoop.hive.metastore.HiveMetaStoreClient 失败:执行错误,从 org.apache.hadoop.hive.ql.exec.DDLTask 返回代码 1

4

6 回答 6

8

您是否已将包含元数据数据库的JDBC 驱动程序的 jar 复制到 Hive 的 lib 目录中?

例如,如果您使用MySQL来保存元数据数据库,则需要复制

mysql-connector-java-5.1.22-bin.jar进入$HIVE_HOME/lib.

这为我解决了同样的错误。

于 2013-01-22T11:49:38.053 回答
2

无法实例化 org.apache.hadoop.hive.metastore.HiveMetaStoreClient

通常,这表明 Hive元存储服务未正确启动。但是您粘贴的错误消息没有包含足够的信息来定位问题的确切原因。
确实,有很多原因可能导致此错误,因为其他作者发布的答案都与特定方面有关。
我的建议是:运行hive --service metastore命令以获得更详细和更有针对性的错误消息,然后相应地解决问题。您也可以参考/tmp/user_name/hive.log日志文件。

于 2013-12-14T03:41:41.213 回答
2

错误消息在 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)
于 2013-06-05T11:52:10.953 回答
2

一种可能性是您的 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 中设置一个配置,以使该目录成为绝对目录而不是相对目录。

看这里:

在我运行 Hive 的任何地方创建 metastore_db

于 2013-04-14T17:26:09.003 回答
1

感谢上面关于 JDBC 驱动程序的回答。我将 Oracle 用于 Hive Metastore,因此:

$ cp $ORACLE_HOME/jdbc/lib/ojdbc6.jar $HIVE_HOME/lib/ojdbc6.jar

于 2013-08-28T22:01:34.673 回答
1

有人告诉我,如果我们的 hive 控制台没有正确终止,通常我们会得到这个异常。修复:

运行 jps 命令,查找“RunJar”进程并使用 kill -9 命令将其杀死

于 2013-07-16T04:57:11.503 回答