在蜂巢中得到错误

时间:2013-01-22 06:33:56

标签: hadoop ireport hive

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

  

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

6 个答案:

答案 0 :(得分:8)

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

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

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

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

答案 1 :(得分:2)

一种可能性是你的hadoop没有运行。我在本地做一个简单的一个节点hadoop集群时遇到了同样的问题。每次启动计算机时,都必须手动启动hadoop节点,然后才能连接到hive。

尝试运行$ HADOOP_HOME / bin / stop-all.sh

如果输出显示没有要停止的节点,这意味着你的hadoop没有启动,在这种情况下,运行

$ HADOOP_HOME / bin / start-all.sh

然后蜂巢,你应该好好去。

(这是使用默认的derby数据库。显然如果您使用的是mysql,那么您也可以从某些连接器配置中获得此错误(请参阅其他答案))。

编辑: 实际上我发现的另一件事是Hive需要在你启动配置单元时创建一个metastore_db目录,但它会在运行配置单元的路径中创建它。如果您在运行配置单元的目录中没有写入权限,则可能会遇到上述错误。要解决这个问题,你可以在hive-site.xml中设置一个配置来使这个目录成为绝对目录而不是相对目录。

见这里:

metastore_db created wherever I run Hive

答案 2 :(得分: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)

答案 3 :(得分:2)

  

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

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

答案 4 :(得分:1)

有人告诉我,如果蜂巢控制台未正确终止,我们通常会遇到此异常。 修复:

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

答案 5 :(得分:1)

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

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