web-dev-qa-db-fra.com

Java: com.Sun.tools.javac.Main introuvable lors de la tentative de compilation du programme Hadoop

Lorsque j'essaie de compiler mon programme dans Hadoop avec cette commande

bin/hadoop com.Sun.tools.javac.Main WordCounter.Java

du dossier Hadoop, il est dit

Error: Could not find or load main class com.Sun.tools.javac.Main

J'ai regardé dans des discussions similaires où des personnes ont suggéré de vérifier si Java_HOME est correctement énoncé. Donc, dans etc/hadoop/hadoop-env.shJ'ai ajouté cette ligne

export Java_HOME=/usr/lib/jvm/Java-7-openjdk-AMD64

puis vérifié si tools.pack est correctement décompressé dans /usr/lib/jvm/Java-7-openjdk-AMD64/lib et c’est le cas. Puis j'ai essayé javac -version qui a donné

javac 1.7.0_65

J'ai essayé de réinstaller Java mais cela n'a pas résolu le problème.

11
Kudayar Pirimbaev

Essayez de définir HADOOP_CLASSPATH variable d’environnement

export HADOOP_CLASSPATH=$Java_HOME/lib/tools.jar
14
ponkin

J'ai dû rétrograder Hadoop à la version 2.9.2 et cela fonctionne.

J'ai aussi eu ceux-ci dans mon environnement:

export Java_HOME=/usr/lib/jvm/Java-1.8.0-openjdk
export PATH=${Java_HOME}/bin:${PATH}
export HADOOP_CLASSPATH=${Java_HOME}/lib/tools.jar
0
William Laszlo

L'erreur signifie que vous n'utilisez pas de JDK pour démarrer Hadoop. La principale différence entre JRE (runtime pur) et JDK réside dans le compilateur Java javac. Pour voir si vous avez un compilateur Java, vous devez vérifier deux emplacements: Il devrait y avoir une javac dans le dossier $Java_HOME/bin plus un fichier $Java_HOME/lib/tools.jar.

Dans votre cas, le premier (le binaire pour démarrer le compilateur) peut être manquant mais vous avez absolument besoin du tools.jar.

Vous dites que vous avez un tools.pack mais je n'en avais jamais entendu parler auparavant. Utilisez votre gestionnaire de paquets pour rechercher openjdk, puis recherchez un paquet dans la liste des résultats qui indique jdk. Sur mon système, ce serait openjdk-7-jdk. Installez ce paquet et l'erreur devrait disparaître.

0
Aaron Digulla