Ich habe Hadoop 2.7.1- und Apache-Hive-1.2.1-Versionen auf Ubuntu 14.0 installiert.
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"
I did below modifications and I am able to start the Hive Shell without any errors:
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
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>
4.1 MySql
4.2 Hadoop
4.3 Hive
4.4 Java
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
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
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
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.
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
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
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.
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.
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
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
Ich habe MySQL DB für Hive MetaStore verwendet. Bitte folgen Sie den nachstehenden Schritten:
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost/metastorecreateDatabaseIfNotExist=true&useSSL=false</value>
</property>
mysql -u hduser -p
drop database metastore
ausführenschematool -initSchema dbType mysql
ausJetzt wird der Fehler gehen.