it-swarm.com.de

java.lang.RuntimeException: org.Apache.hadoop.Hive.ql.metadata.SessionHiveMetaStoreClient kann nicht instanziiert werden

Ich habe Hadoop 2.7.1- und Apache-Hive-1.2.1-Versionen auf Ubuntu 14.0 installiert. 

  1. Warum tritt dieser Fehler auf?
  2. Ist eine Metastore-Installation erforderlich?
  3. Wenn wir den Befehl hive auf dem Terminal eingeben, wie der Xml intern aufgerufen hat, wie ist der Fluss dieser Xmls?
  4. Ist eine andere Konfiguration erforderlich?

Wenn ich den Befehl Hive für das Ubuntu 14.0-Terminal schreibe, wird die folgende Ausnahme ausgelöst.

 $ Hive

    Logging initialized using configuration in jar:file:/usr/local/Hive/Apache-Hive-1.2.1-bin/lib/Hive-common-1.2.1.jar!/Hive-log4j.properties
    Exception in thread "main" Java.lang.RuntimeException: Java.lang.RuntimeException: Unable to instantiate org.Apache.hadoop.Hive.ql.metadata.SessionHiveMetaStoreClient
        at org.Apache.hadoop.Hive.ql.session.SessionState.start(SessionState.Java:522)
        at org.Apache.hadoop.Hive.cli.CliDriver.run(CliDriver.Java:677)
        at org.Apache.hadoop.Hive.cli.CliDriver.main(CliDriver.Java:621)
        at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:62)
        at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
        at Java.lang.reflect.Method.invoke(Method.Java:520)
        at org.Apache.hadoop.util.RunJar.run(RunJar.Java:221)
        at org.Apache.hadoop.util.RunJar.main(RunJar.Java:136)
    Caused by: Java.lang.RuntimeException: Unable to instantiate org.Apache.hadoop.Hive.ql.metadata.SessionHiveMetaStoreClient
        at org.Apache.hadoop.Hive.metastore.MetaStoreUtils.newInstance(MetaStoreUtils.Java:1523)
        at org.Apache.hadoop.Hive.metastore.RetryingMetaStoreClient.<init>(RetryingMetaStoreClient.Java:86)
        at org.Apache.hadoop.Hive.metastore.RetryingMetaStoreClient.getProxy(RetryingMetaStoreClient.Java:132)
        at org.Apache.hadoop.Hive.metastore.RetryingMetaStoreClient.getProxy(RetryingMetaStoreClient.Java:104)
        at org.Apache.hadoop.Hive.ql.metadata.Hive.createMetaStoreClient(Hive.Java:3005)
        at org.Apache.hadoop.Hive.ql.metadata.Hive.getMSC(Hive.Java:3024)
        at org.Apache.hadoop.Hive.ql.session.SessionState.start(SessionState.Java:503)
        ... 8 more
    Caused by: Java.lang.reflect.InvocationTargetException
        at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at Sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.Java:62)
        at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.Java:45)
        at Java.lang.reflect.Constructor.newInstance(Constructor.Java:426)
        at org.Apache.hadoop.Hive.metastore.MetaStoreUtils.newInstance(MetaStoreUtils.Java:1521)
        ... 14 more
    Caused by: javax.jdo.JDOFatalInternalException: Error creating transactional connection factory
    NestedThrowables:
    Java.lang.reflect.InvocationTargetException
        at org.datanucleus.api.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(NucleusJDOHelper.Java:587)
        at org.datanucleus.api.jdo.JDOPersistenceManagerFactory.freezeConfiguration(JDOPersistenceManagerFactory.Java:788)
        at org.datanucleus.api.jdo.JDOPersistenceManagerFactory.createPersistenceManagerFactory(JDOPersistenceManagerFactory.Java:333)
        at org.datanucleus.api.jdo.JDOPersistenceManagerFactory.getPersistenceManagerFactory(JDOPersistenceManagerFactory.Java:202)
        at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:62)
        at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
        at Java.lang.reflect.Method.invoke(Method.Java:520)
        at javax.jdo.JDOHelper$16.run(JDOHelper.Java:1965)
        at Java.security.AccessController.doPrivileged(Native Method)
        at javax.jdo.JDOHelper.invoke(JDOHelper.Java:1960)
        at javax.jdo.JDOHelper.invokeGetPersistenceManagerFactoryOnImplementation(JDOHelper.Java:1166)
        at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.Java:808)
        at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.Java:701)
        at org.Apache.hadoop.Hive.metastore.ObjectStore.getPMF(ObjectStore.Java:365)
        at org.Apache.hadoop.Hive.metastore.ObjectStore.getPersistenceManager(ObjectStore.Java:394)
        at org.Apache.hadoop.Hive.metastore.ObjectStore.initialize(ObjectStore.Java:291)
        at org.Apache.hadoop.Hive.metastore.ObjectStore.setConf(ObjectStore.Java:258)
        at org.Apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.Java:76)
        at org.Apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.Java:136)
        at org.Apache.hadoop.Hive.metastore.RawStoreProxy.<init>(RawStoreProxy.Java:57)
        at org.Apache.hadoop.Hive.metastore.RawStoreProxy.getProxy(RawStoreProxy.Java:66)
        at org.Apache.hadoop.Hive.metastore.HiveMetaStore$HMSHandler.newRawStore(HiveMetaStore.Java:593)
        at org.Apache.hadoop.Hive.metastore.HiveMetaStore$HMSHandler.getMS(HiveMetaStore.Java:571)
        at org.Apache.hadoop.Hive.metastore.HiveMetaStore$HMSHandler.createDefaultDB(HiveMetaStore.Java:624)
        at org.Apache.hadoop.Hive.metastore.HiveMetaStore$HMSHandler.init(HiveMetaStore.Java:461)
        at org.Apache.hadoop.Hive.metastore.RetryingHMSHandler.<init>(RetryingHMSHandler.Java:66)
        at org.Apache.hadoop.Hive.metastore.RetryingHMSHandler.getProxy(RetryingHMSHandler.Java:72)
        at org.Apache.hadoop.Hive.metastore.HiveMetaStore.newRetryingHMSHandler(HiveMetaStore.Java:5762)
        at org.Apache.hadoop.Hive.metastore.HiveMetaStoreClient.<init>(HiveMetaStoreClient.Java:199)
        at org.Apache.hadoop.Hive.ql.metadata.SessionHiveMetaStoreClient.<init>(SessionHiveMetaStoreClient.Java:74)
        ... 19 more
    Caused by: Java.lang.reflect.InvocationTargetException
        at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at Sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.Java:62)
        at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.Java:45)
        at Java.lang.reflect.Constructor.newInstance(Constructor.Java:426)
        at org.datanucleus.plugin.NonManagedPluginRegistry.createExecutableExtension(NonManagedPluginRegistry.Java:631)
        at org.datanucleus.plugin.PluginManager.createExecutableExtension(PluginManager.Java:325)
        at org.datanucleus.store.AbstractStoreManager.registerConnectionFactory(AbstractStoreManager.Java:282)
        at org.datanucleus.store.AbstractStoreManager.<init>(AbstractStoreManager.Java:240)
        at org.datanucleus.store.rdbms.RDBMSStoreManager.<init>(RDBMSStoreManager.Java:286)
        at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at Sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.Java:62)
        at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.Java:45)
        at Java.lang.reflect.Constructor.newInstance(Constructor.Java:426)
        at org.datanucleus.plugin.NonManagedPluginRegistry.createExecutableExtension(NonManagedPluginRegistry.Java:631)
        at org.datanucleus.plugin.PluginManager.createExecutableExtension(PluginManager.Java:301)
        at org.datanucleus.NucleusContext.createStoreManagerForProperties(NucleusContext.Java:1187)
        at org.datanucleus.NucleusContext.initialise(NucleusContext.Java:356)
        at org.datanucleus.api.jdo.JDOPersistenceManagerFactory.freezeConfiguration(JDOPersistenceManagerFactory.Java:775)
        ... 48 more
    Caused by: org.datanucleus.exceptions.NucleusException: Attempt to invoke the "BONECP" plugin to create a ConnectionPool gave an error : The specified datastore driver ("com.mysql.jdbc.Driver") was not found in the CLASSPATH. Please check your CLASSPATH specification, and the name of the driver.
        at org.datanucleus.store.rdbms.ConnectionFactoryImpl.generateDataSources(ConnectionFactoryImpl.Java:259)
        at org.datanucleus.store.rdbms.ConnectionFactoryImpl.initialiseDataSources(ConnectionFactoryImpl.Java:131)
        at org.datanucleus.store.rdbms.ConnectionFactoryImpl.<init>(ConnectionFactoryImpl.Java:85)
        ... 66 more
    Caused by: org.datanucleus.store.rdbms.connectionpool.DatastoreDriverNotFoundException: The specified datastore driver ("com.mysql.jdbc.Driver") was not found in the CLASSPATH. Please check your CLASSPATH specification, and the name of the driver.
        at org.datanucleus.store.rdbms.connectionpool.AbstractConnectionPoolFactory.loadDriver(AbstractConnectionPoolFactory.Java:58)
        at org.datanucleus.store.rdbms.connectionpool.BoneCPConnectionPoolFactory.createConnectionPool(BoneCPConnectionPoolFactory.Java:54)
        at org.datanucleus.store.rdbms.ConnectionFactoryImpl.generateDataSources(ConnectionFactoryImpl.Java:238)
        ... 68 more

Um den obigen Fehler zu vermeiden, habe ich Hive-site.xml erstellt mit:

 <configuration>

      <property>
        <name>Hive.metastore.warehouse.dir</name>
        <value>/home/local/Hive-metastore-dir/warehouse</value>

      </property>

    <property>
      <name>javax.jdo.option.ConnectionURL</name>
      <value>jdbc:mysql://localhost:3306/hivedb?createDatabaseIfNotExist=true</value>
    </property>
    <property>
      <name>javax.jdo.option.ConnectionDriverName</name>
      <value>com.mysql.jdbc.Driver</value>
    </property>
    <property>
      <name>javax.jdo.option.ConnectionUserName</name>
      <value>user</value>
    </property>
    <property>
      <name>javax.jdo.option.ConnectionPassword</name>
      <value>password</value>
    </property>

    <configuration>

Auch die Umgebungsvariablen in ~/.bashrc file bereitgestellt. Trotzdem bleibt der Fehler bestehen

#Hive home directory configuration
export Hive_HOME=/usr/local/Hive/Apache-Hive-1.2.1-bin
export PATH="$PATH:$Hive_HOME/bin"
14
Arti Nalawade
I did below modifications and I am able to start the Hive Shell without any errors:

1. ~/.bashrc

Fügen Sie in der bashrc-Datei die folgenden Umgebungsvariablen bei End Of File hinzu: Sudo gedit ~/.bashrc

#Java Home directory configuration
export Java_HOME="/usr/lib/jvm/Java-9-Oracle"
export PATH="$PATH:$Java_HOME/bin"

# Hadoop home directory configuration
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

2. Hive-Site.xml

Sie müssen diese Datei (Hive-site.xml) im conf-Verzeichnis von Hive erstellen und die folgenden Details hinzufügen

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>

<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://localhost/metastore?createDatabaseIfNotExist=true</value>
</property>


<property>
  <name>javax.jdo.option.ConnectionDriverName</name>
  <value>com.mysql.jdbc.Driver</value>
</property>

<property>
  <name>javax.jdo.option.ConnectionUserName</name>
  <value>root</value>
</property>

<property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value>root</value>
</property>

<property>
  <name>datanucleus.autoCreateSchema</name>
  <value>true</value>
</property>

<property>
  <name>datanucleus.fixedDatastore</name>
  <value>true</value>
</property>

<property>
 <name>datanucleus.autoCreateTables</name>
 <value>True</value>
 </property>

</configuration>

3. Sie müssen auch die JAR-Datei (mysql-connector-Java-5.1.28.jar) im lib-Verzeichnis von Hive ablegen

4. Nachfolgende Installationen, die auf Ihrem Ubuntu zum Starten der Hive-Shell erforderlich sind:

    4.1 MySql
    4.2 Hadoop
    4.3 Hive
    4.4 Java

5. Ausführungsteil:

1. Start all services of Hadoop: start-all.sh

2. Enter the jps command to check whether all Hadoop services are up and running: jps

3. Enter the Hive command to enter into Hive Shell: Hive
19
Arti Nalawade

der Start des Hive-Metastore-Dienstes hat für mich funktioniert ..__ Stellen Sie zunächst die Datenbank für den Hive-Metastore ein:

 $ Hive --service metastore 

` https://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.3.4/bk_installing_manually_book/content/validate_installation.html

Führen Sie anschließend die folgenden Befehle aus:

 $ schematool -dbType mysql -initSchema  
 $ schematool -dbType mysql -info

https://cwiki.Apache.org/confluence/display/Hive/Hive+Schema+Tool

14
Ravi Vyas

In meinem Fall, als ich es versuchte

$ Hive --service metastore 

Ich habe 

MetaException (Nachricht: Versionsinformationen nicht im Metastore gefunden.)

Die für den Metastore erforderlichen Tabellen fehlen in MySQL. Erstellen Sie die Tabellen manuell und starten Sie den Hive-Metastore neu.

cd $Hive_HOME/scripts/metastore/upgrade/mysql/ 

< Login into MySQL > 

mysql> drop database IF EXISTS <metastore db name>; 
mysql> create database <metastore db name>; 
mysql> use <metastore db name>; 
mysql> source Hive-schema-2.x.x.mysql.sql; 

Metastore-Datenbankname sollte mit dem Datenbanknamen übereinstimmen, der im Verbindungseigenschaften-Tag Hive-site.xml -Dateien angegeben ist.

Hive-schema-2.x.x.mysql.sql file hängt von der im aktuellen Verzeichnis verfügbaren Version ab. Versuchen Sie, das Neueste zu wählen, da es auch viele alte Schemadateien enthält.

Versuchen Sie nun, Hive --service metastore .__ auszuführen. Wenn alles gut läuft, starten Sie einfach die Hive vom Terminal aus.

>Hive

Ich hoffe, dass die obige Antwort Ihren Bedürfnissen entspricht.

8
vijayraj34

Wenn Sie nur im lokalen Modus herumspielen, können Sie die Metastore-Datenbank löschen und wieder herstellen:

rm -rf metastore_db/
$Hive_HOME/bin/schematool -initSchema -dbType derby
2
Ajeden

Führen Sie Hive im Debug-Modus aus

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

und dann ausführen 

show tables

kann das eigentliche Problem finden

1
Vignesh

In der Mitte der Stack-Spur, verloren im "Reflection" -Rump, finden Sie die Hauptursache:

Der angegebene Datastore-Treiber ("com.mysql.jdbc.Driver") wurde nicht im CLASSPATH gefunden. Bitte überprüfen Sie Ihre CLASSPATH-Spezifikation und den Namen des Treibers.

Ich habe dieses Problem durch Entfernen des --deploy-mode-Clusters aus dem Spark-Submit-Code behoben. Standardmäßig nimmt spark submit client mode an, was den folgenden Vorteil hat:

1. It opens up Netty HTTP server and distributes all jars to the worker nodes.
2. Driver program runs on master node , which means dedicated resources to driver process.

Im Cluster-Modus :

 1.  It runs on worker node.
 2. All the jars need to be placed in a common folder of the cluster so that it is accessible to all the worker nodes or in folder of each worker node.

Hier kann nicht auf den Hive-Metastore zugegriffen werden, da das Hive-Jar für keinen der Knoten im Cluster verfügbar ist. enter image description here

0
Tutu Kumari

Bitte entfernen Sie MetaStore_db in Ihrem hadoop-Verzeichnis und formatieren Sie Ihre Hdfs mit hadoop namenode -format. Versuchen Sie dann, Ihr hadoop mit start-all.sh neu zu starten.

0
Nitin

mybe your Hive metastore sind inkonsistent! Ich bin in dieser Szene.

zuerst. ich renne

 $ schematool -dbType mysql -initSchema  

dann habe ich das gefunden

> Fehler: Doppelter Schlüsselname 'PCS_STATS_IDX' (Status = 42000, Code = 1061) org.Apache.hadoop.Hive.metastore.HiveMetaException: Schema-Initialisierung FEHLGESCHLAGEN! Metastore-Status wäre inkonsistent !!

dann renne ich

 $ schematool -dbType mysql -info

habe diesen Fehler gefunden

Hive-Distributionsversion: 2.3.0 Metastore-Schemaversion: 1.2.0 org.Apache.hadoop.Hive.metastore.HiveMetaException: Die Metastore-Schemaversion ist nicht kompatibel. Hive-Version: 2.3.0, Datenbankschema-Version: 1.2.0


also formatiere ich meinen Hive Metastore, dann ist es fertig! * drop mysql database, die Datenbank mit dem Namen Hive_db * Lauf schematool -dbType mysql -initSchema zum Initialisieren von Metadaten

0
user10252729

Ich hatte auch dieses Problem, aber ich hatte Hadoop neu gestartet und den Befehl hadoop dfsadmin -safemode verlassen

jetzt starte Hive, es wird funktionieren, denke ich

0
Akash

Ich habe MySQL DB für Hive MetaStore verwendet. Bitte folgen Sie den nachstehenden Schritten: 

  • in Hive-site.xml sollte der Metastore korrekt sein
<property>
 <name>javax.jdo.option.ConnectionURL</name> 
 <value>jdbc:mysql://localhost/metastorecreateDatabaseIfNotExist=true&amp;useSSL=false</value>
</property>
  • gehe zum mysql: mysql -u hduser -p
  • dann drop database metastore ausführen
  • dann kommen Sie aus MySQL heraus und führen schematool -initSchema dbType mysql aus

Jetzt wird der Fehler gehen.

0
arunava maiti