web-dev-qa-db-fra.com

java.lang.RuntimeException: impossible d'instancier org.Apache.hadoop.Hive.metastore.HiveMetaStoreClient

J'ai configuré ma ruche comme indiqué sur le lien: http://www.youtube.com/watch?v=Dqo1ahdBK_A , mais l'erreur suivante s'affiche lors de la création d'une table dans Hive. J'utilise hadoop-1.2.1 et 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
31
Raju Sharma

Cela ressemble à un problème avec votre metastore. Si vous utilisez le derby intégré au métastore Hive par défaut. Le fichier de verrouillage serait là en cas de sortie anormale. si vous supprimez ce fichier de verrouillage, ce problème sera résolu

rm   metastore_db/*.lck
41
SachinJ

Cela pourrait être un problème avec le métastore tel que décrit par sachinjose ou un problème de connexion. Exécutez la console Hive en mode débogage comme suit:

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

Ensuite, exécutez une requête simple comme show tables; et voyez ce qui se passe. J'ai rencontré ce problème après avoir redémarré un code nominatif, en raison du mauvais choix de l'hôte dans les fichiers de configuration (ec2 génère une nouvelle adresse IP privée/nom d'hôte au redémarrage).

8
Ashex

Exécutez cette commande depuis la console:

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

Maintenant courir 

show databases;

Si vous voyez une exception comme ci-dessous:

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.

Cela signifie qu'il existe un problème d'autorisations avec metastore_db. Vous devez modifier les autorisations du dossier complet. Je cours ma ruche en tant qu'utilisateur hdfs. Donc, j'ai utilisé la commande 

chown -R hdfs:hadoop * 

dans le répertoire Hive. Cela a résolu le problème.

5
Krishna Prasad Y
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

Pour résoudre ce problème, démarrez d’abord les services hadoop.

$ start-all.sh

Puis je cours 

Hive> show database;

Ça fonctionne bien pour moi.

2
user5132316

make Hive.metastore.schema.verification = false dans le fichier Hive-site.xml Dans mon cas, cela fonctionne bien.

1
Sandeep Mishra
rm metastore_db/*.lck

Cela fonctionne aussi pour moi… .. Il peut être trouvé dans votre répertoire home/user. Vous pouvez utiliser la commande locate pour le trouver: locate metastore_db 

Après avoir supprimé les fichiers de verrouillage, fermez la session en cours. Appelez Hive Shell dans une nouvelle session

1
Manish Agrawal

Je faisais face au même problème, mais certains points importants pourraient résoudre ce problème.

1.Placez ce qui suit au début de 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>

ceci est défini le chemin relatif dans l'URI absolu et la configuration de Metastore où la base de données est stockée

2.Remove $Hive_HOME/metastore_db Mais sachez que cela enlèvera complètement votre schéma!

3.Maintenant, vous devez initialiser la base de données Derby.Par défaut, Hive utilise la base de données Derby

$ Hive_HOME/bin/schematool -initSchema -dbType derby

de plus, je suppose que votre variable d'environnement a été définie correctement. Si ce n'est pas le cas, vérifiez-les comme ci-dessous:

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

puis exécutez la commande Hive et tapez show databases;

0
Hamid

Le redémarrage de la machine virtuelle ou du système doit également libérer le verrou.

0
Chalpat

Lorsque j'ai utilisé jdk 11, j'ai déployé Hive sur mon nœud maître, puis ces exceptions ont été levées. Beaucoup de méthodes que j'ai essayées mais inutiles. Finalement, j'ai changé la version de jdk de 11 à 8, qui était utilisée dans le noeud principal. Puis j'ai démarré la ruche avec succès.

0
engstd

J'avais la même erreur mais je ne pouvais même pas démarrer le shell ruche. Après avoir essayé la très utile commande de débogage Hive: 

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

J'ai pu constater que Hive ne pouvait pas trouver un TGT Kerberos valide. Vous verrez dans les informations de débogage quelque chose à propos de l'échec de la négociation SASL et de l'absence de TGT Kerberos valide. Ma solution était de courir

kinit

avant d’exécuter la CLI Hive. 

0
Ryan Shirley

La réponse se trouve dans http://www.cloudera.com/content/cloudera-content/cloudera-docs/CDH5/5.0/CDH5-Installation-Guide/cdh5ig_Hive_schema_tool.html

Pour supprimer la vérification du schéma et autoriser le métastore à modifier implicitement le schéma, vous devez définir la propriété de configuration Hive.metastore.schema.verification sur false dans Hive-site.xml.

0
roshan4074

cela pourrait être dû à plus d'une "metastore_db". Supprimez "metastore_db", redémarrez le cluster hadoop et ouvrez Hive Shell à partir du dossier $ Hive_HOME/bin

0
Tamil

Étant un débutant, j'ai eu le même ensemble d'erreurs.
Il a été constaté que l’un des démons de mon cas, namenode, n’était pas initialisé. Lors de l’installation de l’ hadoop, il serait sage de prendre l’habitude de le frapper à la suite des commandes: 
ps -ef | grep "namenode" 
ps -ef | grep "datanode" 
ps -ef | grep "traqueur"

Il faut vérifier le journal approprié si l'un des démons ne fonctionne pas.

0
Jignesh Rawal

supprimez le code dans Hive-site.xml et collez ce code dans 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

Si c'est dans la machine locale, on dirait qu'un autre terminal est ouvert avec Hive Shell/session. Vous ne pouvez avoir qu'une session en utilisant la base de données Derby intégrée. Fermez toutes les autres sessions Hive et essayez.

0
ajesh kumar

Je suis surpris de voir que personne n'a signalé le problème réel qui est le plus souvent le cas.

System.setSecurityManager(null)

Mettez cette ligne au début de votre application.

0
Abhinandan Dubey