J'essaie de lancer Hive 3.1 avec Hadoop 3.0. Voici la configuration de mon système:
Ubuntu 18.04.1 LTS
Hadoop version 3.0.3
Hive 3.1.0
Derby 10.14.2
Quand j'exécute les tables d'exposition; requête je reçois l'erreur suivante.
FAILED: HiveException Java.lang.RuntimeException: Unable to instantiate org.Apache.hadoop.Hive.ql.metadata.SessionHiveMetaStoreClient
Vous trouverez ci-dessous l'erreur de détail dans le fichier journal Hive.
2018-09-05T11:38:25,952 INFO [main] conf.HiveConf: Found configuration file file:/usr/local/Apache-Hive-3.1.0-bin/conf/Hive-site.xml
2018-09-05T11:38:30,549 INFO [main] SessionState: Hive Session ID = 826ec55c-7fca-4fff-baa5-b5a010e5af89
2018-09-05T11:38:35,948 INFO [main] SessionState:
Logging initialized using configuration in jar:file:/usr/local/Apache-Hive-3.1.0-bin/lib/Hive-common-3.1.0.jar!/Hive-log4j2.properties Asy$
2018-09-05T11:38:47,015 INFO [main] session.SessionState: Created HDFS directory: /tmp/Hive/hadoop
2018-09-05T11:38:47,069 INFO [main] session.SessionState: Created local directory: /tmp/mydir
2018-09-05T11:38:47,096 INFO [main] session.SessionState: Created HDFS directory: /tmp/Hive/hadoop/826ec55c-7fca-4fff-baa5-b5a010e5af89
2018-09-05T11:38:47,104 INFO [main] session.SessionState: Created local directory: /tmp/mydir/826ec55c-7fca-4fff-baa5-b5a010e5af89
2018-09-05T11:38:47,122 INFO [main] session.SessionState: Created HDFS directory: /tmp/Hive/hadoop/826ec55c-7fca-4fff-baa5-b5a010e5af89/_$
2018-09-05T11:38:47,125 INFO [main] conf.HiveConf: Using the default value passed in for log id: 826ec55c-7fca-4fff-baa5-b5a010e5af89
2018-09-05T11:38:47,126 INFO [main] session.SessionState: Updating thread name to 826ec55c-7fca-4fff-baa5-b5a010e5af89 main
2018-09-05T11:38:50,476 INFO [826ec55c-7fca-4fff-baa5-b5a010e5af89 main] metastore.HiveMetaStore: 0: Opening raw store with implementatio$
2018-09-05T11:38:50,695 WARN [826ec55c-7fca-4fff-baa5-b5a010e5af89 main] metastore.ObjectStore: datanucleus.autoStartMechanismMode is set$
2018-09-05T11:38:50,714 INFO [826ec55c-7fca-4fff-baa5-b5a010e5af89 main] metastore.ObjectStore: ObjectStore, initialize called
2018-09-05T11:38:50,717 INFO [826ec55c-7fca-4fff-baa5-b5a010e5af89 main] conf.MetastoreConf: Found configuration file file:/usr/local/apa$
2018-09-05T11:38:50,719 INFO [826ec55c-7fca-4fff-baa5-b5a010e5af89 main] conf.MetastoreConf: Unable to find config file hivemetastore-sit$
2018-09-05T11:38:50,720 INFO [826ec55c-7fca-4fff-baa5-b5a010e5af89 main] conf.MetastoreConf: Found configuration file null
2018-09-05T11:38:50,722 INFO [826ec55c-7fca-4fff-baa5-b5a010e5af89 main] conf.MetastoreConf: Unable to find config file metastore-site.xml
2018-09-05T11:38:50,722 INFO [826ec55c-7fca-4fff-baa5-b5a010e5af89 main] conf.MetastoreConf: Found configuration file null
Hive-site.xml
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:derby:;databaseName=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>
Variables d'environnement dans .profile (j'essaie de configurer une installation effectuée par quelqu'un d'autre afin que les variables d'environnement soient configurées dans .profile au lieu de .bashrc même si Hadoop est exécuté manuellement)
#Hive
export Hive_HOME=/usr/local/Apache-Hive-3.1.0-bin
export Hive_CONF_DIR=/usr/local/Apache-Hive-3.1.0-bin/conf
export PATH=$Hive_HOME/bin:$PATH
export CLASSPATH=$CLASSPATH:/usr/local/hadoop/lib/*:.
export CLASSPATH=$CLASSPATH:/usr/local/Apache-Hive-3.1.0-bin/lib/*:.
#DERBY
DERBY_HOME=/usr/local/db-derby-10.14.2.0-bin
export PATH=$PATH:$DERBY_HOME/bin
export CLASSPATH=$CLASSPATH:$DERBY_HOME/lib/derby.jar:$DERBY_HOME/lib/derbytool$
Les messages d'erreur indiquent un fichier metastore-site.xml que je n'ai pas rencontré dans la configuration de Hive.
Je pense que Hive s'attend à trouver la base de données Derby dans le répertoire de travail actuel. Hive créera la base de données, car create=true
dans javax.jdo.option.ConnectionURL property
, mais n'initialisera pas le schéma dans la base de données.
Ma configuration:
Apache Derby des référentiels Ubuntu ( Version: 10.14.1.0-1ubuntu1 actuellement)
Sudo apt installer des outils derby libderby-Java libderbyclient-Java
Selon Hive Documentation nous devons exécuter explicitement ShemaTool.
Je décide de conserver ma base de données Derby dans le répertoire Hive_HOME (/opt/Hive-3.1.0-bin dans mon cas). Vous pouvez configurer l'emplacement de la base de données Derby dans Hive-site.xml :
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:derby:/opt/Hive-3.1.0-bin/metastore_db;databaseName=metastore_db;create=true</value>
</property>
Assurez-vous qu'il n'y a pas encore de base de données Derby:
$ ls $Hive_HOME/meta*
ls: cannot access '/opt/Hive-3.1.0-bin/meta*': No such file or directory
Commencez la ruche:
$ pwd
/home/hadoop
$ Hive
hive> show tables;
FAILED: HiveException Java.lang.RuntimeException: Unable to instantiate org.Apache.hadoop.Hive.ql.metadata.SessionHiveMetaStoreClient
Hive> exit;
Nous avons maintenant la base de données Derby, mais elle n’est pas fonctionnelle:
$ ls -d $Hive_HOME/meta*
/opt/Hive-3.1.0-bin/metastore_db
Nous devons donc créer un schéma métada:
$ rm -rf $Hive_HOME/metastore_db
$ cd $Hive_HOME
$ schematool -initSchema -dbType derby
...
Initialization script completed
schemaTool completed
Maintenant Hive fonctionne comme prévu:
$ cd
$ Hive
hive> show tables;
OK
Time taken: 0.803 seconds