35

我已经按照以下链接配置了我的 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
4

17 回答 17

47

看起来您的元存储有问题。如果您使用的是默认的 hive Metastore 嵌入式 derby。异常退出时会有锁文件。如果您删除该锁定文件,此问题将得到解决

rm   metastore_db/*.lck
于 2014-03-28T14:08:57.433 回答
10

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

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

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

于 2014-04-23T10:04:11.600 回答
7

从控制台运行此命令:

./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 存在一些权限问题。您需要更改整个文件夹的权限。我以 hdfs 用户身份运行我的配置单元。所以,我使用了命令

chown -R hdfs:hadoop * 

在 hive 目录中。这解决了这个问题。

于 2014-08-27T03:55:25.547 回答
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;

这对我来说可以。

于 2015-07-19T13:28:07.177 回答
1

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

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

于 2014-07-22T13:35:15.097 回答
1
rm metastore_db/*.lck

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

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

于 2015-07-01T03:07:46.330 回答
1

我遇到了同样的错误,但我什至无法启动 hive shell。在尝试了非常有用的 hive 调试命令后:

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

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

kinit

在运行 hive CLI 之前。

于 2018-12-28T18:01:28.620 回答
1

在 hive-site.xml 文件中设置 hive.metastore.schema.verification=false 这个错误将被移除。就我而言,它运行良好。

于 2016-01-13T03:58:04.530 回答
0

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

于 2014-04-01T07:58:05.143 回答
0

这可能是由于不止一个“metastore_db”。删除“metastore_db”,重新启动 hadoop 集群并从 $HIVE_HOME/bin 文件夹打开 hive shell

于 2014-05-04T07:34:32.217 回答
0

作为一个新手,我遇到了同样的错误。
发现我的案例namenode中的守护进程之一没有启动。在安装 hadoop 时,最好养成使用以下命令的习惯:
ps -ef | grep "namenode"
ps -ef | grep "数据节点"
ps -ef | grep“跟踪器”

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

于 2015-05-19T13:51:33.760 回答
0

我很惊讶没有人指出最常见的实际问题。

System.setSecurityManager(null)

将此行放在应用程序的开头。

于 2018-11-26T21:13:19.173 回答
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>
于 2017-02-03T04:10:53.833 回答
0

如果它在本地机器上,看起来你用 hive shell/session 打开了另一个终端。您只能使用嵌入式 derby 数据库进行一次会话。关闭所有其他 hive 会话并尝试。

于 2015-07-16T11:49:14.470 回答
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 德比

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

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;

于 2018-07-24T12:46:44.910 回答
0

当我使用 jdk 11 时,我在我的主节点上部署了 hive,然后抛出了这些异常。很多方法我都试过但没用。最终我将 jdk 的版本从 11 更改为 8,用于主节点。然后我成功启动了蜂巢。

于 2019-03-24T04:55:46.610 回答
-1

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

  1. 创建一个文件 hive-site.xml 并输入详细信息(对于本地/生产模式)。确保以下位置存在 /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--> 减少内存使用后将 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. 运行配置单元查询。

于 2016-02-14T17:50:23.430 回答