web-dev-qa-db-fra.com

Utilisation de Hadoop: localhost: Erreur: Java_HOME n'est pas défini.

Je travaille avec Ubuntu 12.04 LTS. 

Je suis en train de parcourir le manuel hadoop quickstart pour créer une opération pseudo-distribuée. Cela semble simple et direct (facile!). 

Cependant, lorsque j'essaie d'exécuter start-all.sh, je reçois:

localhost: Error: Java_HOME is not set.

J'ai lu tous les autres conseils sur stackoverflow pour ce problème et j'ai suivi les consignes suivantes pour m'assurer que Java_HOME est défini:

Dans /etc/hadoop/conf/hadoop-env.sh j'ai mis

Java_HOME=/usr/lib/jvm/Java-6-Oracle
export Java_HOME

Dans /etc/bash.bashrc j'ai mis

Java_HOME=/usr/lib/jvm/Java-6-Oracle
export Java_HOME
PATH=$PATH:$Java_HOME/bin
export PATH

which Java renvoie:

/usr/bin/Java

Java –version fonctionne

echo $Java_HOME renvoie:

/usr/lib/jvm/Java-6-Oracle

J'ai même essayé de devenir root et d'écrire explicitement le dans le terminal:

$ Java_HOME=/usr/lib/jvm/Java-6-Oracle
$ export Java_HOME
$ start-all.sh

Si vous pouviez me montrer comment résoudre cette erreur, elle serait grandement appréciée ... Je pense que mon Java_HOME est en train d'être remplacé. Si tel est le cas, pourriez-vous m'expliquer comment rendre mes exportations mondiales?

23
Ali Ismail

J'utilise hadoop 1.1 et suis confronté au même problème.

Je l'ai résolu en changeant la variable Java_HOME dans /etc/hadoop/hadoop-env.sh en tant que:

export Java_HOME=/usr/lib/jvm/<jdk folder>
53
Krishna

La solution à ce problème consiste à exporter la variable Java_HOME dans le fichier conf/hadoop-env.sh.

Peu importe que vous ayez déjà exporté cette variable dans ~/.bashrc, cela montrera toujours l'erreur.

Donc edit conf/hadoop-env.sh et décommentez la ligne "export Java_HOME" et ajoutez un chemin de système de fichiers approprié, c’est-à-dire le chemin de votre JDK Java.

# L'implémentation Java à utiliser. Champs obligatoires.
export Java_HOME = "/ chemin/vers/Java/JDK /" 

18
bitek

extrait de etc/hadoop/hadoop-env.sh

Java_HOME est la seule variable d’environnement requise. Tous les autres sont optionnel. Lorsque vous exécutez une configuration distribuée, il est préférable d’utiliser définissez Java_HOME dans ce fichier afin qu'il soit correctement défini sur les nœuds distants

Cela signifie qu'il est préférable de définir Java_HOME ici .. même si la définition existante lit la variable Java_HOME. Peut-être que cela ne récupère pas la valeur de Java_HOME de la valeur précédemment définie ... Le manuel standard Apache ne dit pas ceci :( :(

1
Nitesh Chaturvedi

Couru dans le même problème sur Ubuntu LTS 16.04. L'exécution de bash -vx ./bin/hadoop a montré qu'il testait si Java était un répertoire. J'ai donc changé Java_HOME en un dossier et cela a fonctionné.

++ [[ ! -d /usr/bin/Java ]]
++ hadoop_error 'ERROR: Java_HOME /usr/bin/Java does not exist.'
++ echo 'ERROR: Java_HOME /usr/bin/Java does not exist.'
ERROR: Java_HOME /usr/bin/Java does not exist.

J'ai donc changé Java_HOME dans ./etc/hadoop/hadoop-env.sh en

export Java_HOME=/usr/lib/jvm/Java-8-Oracle/jre/

et hadoop commence bien. Ceci est également mentionné dans cet article article .

1
kometen

La façon de déboguer ceci est de mettre un "echo $ Java_HOME" dans start-all.sh. Exécutez-vous votre environnement hadoop sous un nom d'utilisateur différent ou sous votre propre nom? Si c'est le cas, il est fort probable que la variable d'environnement Java_HOME ne soit pas définie pour cet utilisateur.

L'autre problème potentiel est que vous avez mal spécifié Java_HOME et que la valeur que vous avez fournie ne pointe pas vers un JDK/JRE. Notez que "which Java" et "Java -version" fonctionneront tous les deux, même si Java_HOME n'est pas défini correctement.

1
Paul Sanwald

peu importe la version de Debian ou de Linux, sachez simplement que ~/.bash_profile appartient à un utilisateur spécifique et n’est pas étendu à tout le système. dans un environnement pseudo-distribué hadoop fonctionne sur localhost donc le $Java_HOME dans .bash_profile n’est plus utile.

il suffit d'exporter Java_HOME dans ~/.bashrc et de l'utiliser à l'échelle du système.

1
Mr. Crowley

J'avais également rencontré le même problème dans hadoop 1.1 Je n'avais pas remarqué que le Java_HOME était commenté dans: hadoop/conf/hadoop-env.sh

C'était 

/#Java_HOME=/usr/lib/jvm/Java-6-Oracle

Dû changer pour 

Java_HOME=/usr/lib/jvm/Java-6-Oracle
1
codeguru
echo "export Java_HOME=/usr/lib/Java" >> $HADOOP_HOME/etc/hadoop/hadoop-env.sh

Remarque: n'utilisez pas export Java_HOME=${Java_HOME}!

0
JsonBruce

Changer la variable Java_HOME dans conf/hadoop-env.sh

export Java_HOME=/etc/local/Java/<jdk folder>
0
Raja Sekaran

Vérifiez si vos alternatives pointent vers la bonne, vous pouvez en fait pointer vers une version différente et essayer de modifier le fichier hadoop-env.sh sur une autre version installée. 

-alternatives --install/etc/hadoop/conf [nom_générique] [votre chemin correct] priority {pour une page de contrôle supplémentaire des alternatives}

définir des alternatives manuellement, 

alternatives --set [nom générique] [votre chemin actuel].

0
Rajarsh