web-dev-qa-db-ja.com

java.lang.RuntimeException:org.Apache.hadoop.Hive.metastore.HiveMetaStoreClientをインスタンス化できません

リンクに記載されているとおりに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
33
Raju Sharma

メタストアに問題があるようです。デフォルトのHiveメタストア埋め込みダービーを使用している場合。異常終了した場合にロックファイルが存在します。そのロックファイルを削除すると、この問題は解決します

rm   metastore_db/*.lck
43
SachinJ

これは、説明されているsachinjoseなどのメタストアの問題または接続の問題である可能性があります。次のようにデバッグモードでHiveコンソールを実行します。

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

次に、show tables;などの簡単なクエリを実行して、何が起こるかを確認します。ネームノードを再起動した後、この問題に遭遇しました。これは、構成ファイルに間違ったホストが設定されていたためです(再起動すると、ec2は新しいプライベートIP /ホスト名を生成します)。

9
Ashex

コンソールから次のコマンドを実行します。

./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にパーミッションの問題があることを意味します。完全なフォルダーのアクセス許可を変更する必要があります。 Hfsをhdfsユーザーとして実行しています。だから、私はコマンドを使用しました

chown -R hdfs:hadoop * 

hiveディレクトリ内。これで問題は解決しました。

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;

それは私のためにうまく機能します。

2
user5132316

hive-site.xmlファイルでHive.metastore.schema.verification = falseを作成すると、このエラーは削除されます。私の場合、それはうまく機能しています。

1
Sandeep Mishra
rm metastore_db/*.lck

それも私には有効です。あなたのhome/userディレクトリ。 locateコマンドを使用して検索できます:locate metastore_db

ロックファイルを削除した後、現在のセッションを閉じます。新しいセッションでHive Shellを呼び出す

1
Manish Agrawal

私は同じ問題に直面していましたが、この問題を解決できる重要なポイントがいくつかあります。

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ただし、これによりスキーマが完全に削除されることに注意してください!

。現在、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;

0
Hamid

仮想マシンまたはシステムを再起動すると、ロックも解除されます。

0
Chalpat

Jdk 11を使用したときに、マスターノードにHiveを展開すると、それらの例外がスローされました。私が試した多くの方法が役に立たない。最終的に、マスターノードで使用されるjdkのバージョンを11から8に変更しました。その後、Hiveを正常に開始しました。

0
engstd

同じエラーが発生していましたが、Hive Shellを起動することさえできませんでした。非常に便利なHiveデバッグコマンドを試した後:

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

Hiveが有効なKerberos TGTを見つけられなかったことを確認できました。 SASLネゴシエーションが失敗し、有効なKerberos TGTがないというデバッグ情報が表示されます。私の解決策は実行することでした

kinit

hive CLIを実行する前に。

0
Ryan Shirley

答えは 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に設定する必要があります。

0
roshan4074

これは、複数の「metastore_db」が原因である可能性があります。 「metastore_db」を削除し、hadoopクラスターを再起動し、$ Hive_HOME/binフォルダーからHive Shellを開きます

0
Tamil

初心者なので、同じエラーが発生しました。
私の場合、namenodeのデーモンの1つが開始されていないことがわかりました。 hadoopをインストールする際、次のコマンドを実行するのを習慣にするのが賢明です。
ps -ef | grep "namenode"
ps -ef | grep "datanode"
ps -ef | grep "トラッカー"

デーモンのいずれかが動作していない場合は、関連するログを確認する必要があります。

0
Jignesh Rawal

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>
0
shivam

ローカルマシンにある場合は、Hive Shell/sessionで別のターミナルを開いているようです。組み込みのダービーデータベースを使用するセッションは1つのみです。他のすべてのHiveセッションを閉じて、試してください。

0
ajesh kumar

ほとんどの場合、実際の問題を誰も指摘していないことに驚いています。

System.setSecurityManager(null)

この行をアプリケーションの先頭に配置します。

0