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
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
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).
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.
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.
make Hive.metastore.schema.verification = false dans le fichier Hive-site.xml Dans mon cas, cela fonctionne bien.
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
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;
Le redémarrage de la machine virtuelle ou du système doit également libérer le verrou.
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.
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.
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.
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
É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.
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>
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.
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.