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?
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>
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 /"
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 :( :(
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 .
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.
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.
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
echo "export Java_HOME=/usr/lib/Java" >> $HADOOP_HOME/etc/hadoop/hadoop-env.sh
Remarque: n'utilisez pas export Java_HOME=${Java_HOME}
!
Changer la variable Java_HOME
dans conf/hadoop-env.sh
export Java_HOME=/etc/local/Java/<jdk folder>
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].