Java: com.sun.tools.javac.Не обнаруживается при попытке скомпилировать программу Hadoop

Когда я пытаюсь скомпилировать мою программу в Hadoop с помощью этой команды

bin/hadoop com.sun.tools.javac.Main WordCounter.java

из папки Hadoop, говорится:

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

Я смотрел в похожих потоках, где люди предлагали проверить, правильно ли указано JAVA_HOME. Поэтому в etc/hadoop/hadoop-env.sh я добавил эту строку

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64

затем проверяется, правильно ли распакована tools.pack в /usr/lib/jvm/java-7-openjdk-amd64/lib, и это было. Затем я попробовал javac -version, который дал

javac 1.7.0_65

Я попытался переустановить Java, но это не решило проблему.

Ответ 1

Попробуйте установить переменную среды HADOOP_CLASSPATH

export HADOOP_CLASSPATH=$JAVA_HOME/lib/tools.jar

Ответ 2

Ошибка означает, что вы не используете JDK для запуска Hadoop. Основное различие между JRE (чистая среда исполнения) и JDK - это компилятор Java javac. Чтобы увидеть, есть ли у вас Java-компилятор, вам нужно проверить два места: в папке $JAVA_HOME/bin должен быть javac плюс должен быть файл $JAVA_HOME/lib/tools.jar.

В вашем случае первый (двоичный, чтобы запустить компилятор) может отсутствовать, но вам абсолютно необходимо tools.jar.

Вы говорите, что у вас есть tools.pack, но я не слышал об этом раньше. Используйте менеджер пакетов для поиска openjdk, а затем найдите пакет в списке результатов, который говорит jdk. В моей системе это будет openjdk-7-jdk. Установите этот пакет, и ошибка должна исчезнуть.

Ответ 3

Я должен был понизить Hadoop до 2.9.2, и он работает.

Я также имел это в своей среде:

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