java.lang.RuntimeException:无法实例化org.apache.hadoop.hive.metastore.HiveMetaStoreClient

时间:2014-03-28 11:17:32

标签: hive hiveql hive-metastore

我已将我的Hive配置为链接:http://www.youtube.com/watch?v=Dqo1ahdBK_A,但在Hive中创建表时出现以下错误。我使用的是hadoop-1.2.1和hive-0.12.0。

hive> create table employee(emp_id int,name string,salary double);
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClient

17 个答案:

答案 0 :(得分:42)

您的Metastore看起来有问题。如果您使用默认的hive Metastore嵌入式德比。如果退出异常,锁定文件将存在。如果删除该锁定文件,则会解决此问题

rm   metastore_db/*.lck

答案 1 :(得分:8)

这可能是像sachinjose描述的Metastore或连接问题的问题。在调试模式下运行配置单元控制台,如下所示:

hive -hiveconf hive.root.logger=DEBUG,console

然后执行像show tables;这样的简单查询,看看会发生什么。我在重新启动namenode后遇到了这个问题,这是由于配置文件中设置了错误的主机(ec2在重新启动时会生成新的私有IP /主机名)。

答案 2 :(得分:5)

从控制台运行此命令:

./hive -hiveconf hive.root.logger=DEBUG,console

现在运行

show databases;

如果您看到如下例外:

java.sql.SQLException: A read-only user or a user in a read-only database is not permitted to disable read-only mode on a connection.

这意味着metastore_db存在一些权限问题。您需要更改完整文件夹的权限。我正在运行我的hive作为hdfs用户。所以,我使用了命令

chown -R hdfs:hadoop * 
在hive目录中。这解决了这个问题。

答案 3 :(得分:2)

hive> show databases;
FAILED: Error in metadata: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClient
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask

要解决此问题,请先启动hadoop服务。

$ start-all.sh

然后我跑

hive> show database;

它适用于我。

答案 4 :(得分:1)

rm metastore_db/*.lck

它也适合我。 它可以在您的home/user目录中找到。您可以使用locate命令找到它: locate metastore_db

删除锁定文件后,关闭当前会话。 在新会话中调用hive shell

答案 5 :(得分:1)

在hive-site.xml文件中生成hive.metastore.schema.verification = false 此错误将被删除。就我而言,它运作良好。

答案 6 :(得分:0)

如果它在本地计算机中,看起来你有另一个使用hive shell / session打开的终端。您只能使用嵌入式德比数据库进行一次会话。关闭所有其他配置单元会话并尝试。

答案 7 :(得分:0)

当我使用jdk 11时,我在主节点上部署了配置单元,然后抛出了这些异常。我尝试了许多方法,但没有用。最终,我将jdk的版本从11更改为8,用于主节点。然后,我成功启动了配置单元。

答案 8 :(得分:0)

我遇到了同样的错误,但是我什至无法启动配置单元外壳。尝试了非常有用的配置单元调试命令后:

hive -hiveconf hive.root.logger=DEBUG,console

我能够看到Hive找不到有效的Kerberos TGT。您将在调试信息中看到有关SASL协商失败的信息,并且没有有效的Kerberos TGT。我的解决方案是运行

kinit

在运行配置单元CLI之前。

答案 9 :(得分:0)

我很惊讶地看到没有人指出实际的问题,这是最常见的情况。

System.setSecurityManager(null)

在应用程序的开头放置这一行。

答案 10 :(得分:0)

我面临着同样的问题,有一些重要的观点可以解决此问题。

1。将以下内容放在hive-site.xml的开头

  <property>
    <name>system:java.io.tmpdir</name>
    <value>/tmp/hive/java</value>
  </property>
  <property>
    <name>system:user.name</name>
    <value>${user.name}</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:derby:,databaseName=$HIVE_HOME/metastore_db;create=true</value>
    <description>JDBC connect string for a JDBC metastore </description>
  </property>

这是在绝对URI中设置相对路径并配置存储数据库的Metastore

2。删除$HIVE_HOME/metastore_db,但是请注意,这将完全删除您的架构!

3。现在,您必须初始化Derby数据库。默认情况下,Hive使用Derby数据库

  

$ HIVE_HOME / bin / schematool -initSchema -dbType derby

我还认为您的环境变量已正确设置,如果没有,请检查如下所示的变量:

export HADOOP_HOME=/usr/local/hadoop 
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
export HIVE_HOME=/usr/lib/hive
export PATH=$PATH:$HIVE_HOME/bin

然后运行hive命令并键入show databases;

答案 11 :(得分:0)

删除hive-site.xml中的代码并将此代码粘贴到hive-site.xml中。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?><!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:derby:;databaseName=/home/hadoop/Desktop/apache-hive-2.1.1-bin/metastore_db;create=true</value>
<description>
JDBC connect string for a JDBC metastore.
To use SSL to encrypt/authenticate the connection, provide database-specific SSL flag in the connection URL.
For example, jdbc:postgresql://myhost/db?ssl=true for postgres database.
</description>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
<description>location of default database for the warehouse</description>
</property>
<property>
<name>hive.metastore.uris</name>
<value/>
<description>Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>org.apache.derby.jdbc.EmbeddedDriver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.PersistenceManagerFactoryClass</name>
<value>org.datanucleus.api.jdo.JDOPersistenceManagerFactory</value>
<description>class implementing the jdo persistence</description>
</property>
</configuration>

答案 12 :(得分:0)

作为一个新手,我得到了同样的错误。
我发现我的case namenode中的一个守护进程没有启动。 在安装hadoop时,明智的做法是按照以下命令打击他: ps -ef | grep&#34; namenode&#34;
ps -ef | grep&#34; datanode&#34;
ps -ef | grep&#34; tracker&#34;

如果任何守护程序不起作用,则需要检查相关日志。

答案 13 :(得分:0)

答案位于http://www.cloudera.com/content/cloudera-content/cloudera-docs/CDH5/5.0/CDH5-Installation-Guide/cdh5ig_hive_schema_tool.html

要禁止架构检查并允许Metastore隐式修改架构,您需要在hive-site.xml中将hive.metastore.schema.verification配置属性设置为false。

答案 14 :(得分:0)

这可能是由于不止一个&#34; metastore_db&#34;。从$ HIVE_HOME / bin文件夹中删除&#34; metastore_db&#34;,重启hadoop集群并打开配置单元shell

答案 15 :(得分:0)

重新启动虚拟机或系统也应该释放锁定。

答案 16 :(得分:-1)

我遇到了同样的问题 - 使用以下步骤来解决它:

  1. 创建文件hive-site.xml并输入详细信息(对于Local / Prod模式)。确保以下位置存在/ home / hadoop / bhishm / warehouse

    示例:

    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
    <property>
        <name>hive.metastore.warehouse.dir</name>
        <value>/home/hadoop/bhishm/warehouse</value>
        <description>
        Local or HDFS directory where Hive keeps table contents.
        </description>
    </property>
    <property>
        <name>hive.metastore.local</name>
        <value>true</value>
        <description>
        Use false if a production metastore server is used.
        </description>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:derby:;databaseName=/home/hadoop/bhishm/warehouse/metastore_db;create=true</value>
        <description>
        The JDBC connection URL.
        </description>
    </property>
    </configuration>
    
  2. 编辑hive-env.sh - &gt;减少内存使用后,将java路径添加为第一行:

    示例:

    # Hive Client memory usage can be an issue if a large number of clients
    # are running at the same time. The flags below have been useful in 
    # reducing memory usage:
    
    # The java implementation to use.  Required.
    
    export JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk
    
  3. 运行配置单元查询。