Ответ 1
Попробуйте установить переменную среды HADOOP_CLASSPATH
export HADOOP_CLASSPATH=$JAVA_HOME/lib/tools.jar
Когда я пытаюсь скомпилировать мою программу в 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, но это не решило проблему.
Попробуйте установить переменную среды HADOOP_CLASSPATH
export HADOOP_CLASSPATH=$JAVA_HOME/lib/tools.jar
Ошибка означает, что вы не используете 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
. Установите этот пакет, и ошибка должна исчезнуть.
Я должен был понизить 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