Ответ 1
Я использую hadoop 1.1, и столкнулся с той же проблемой.
Я решил это путем изменения переменной JAVA_HOME
в /etc/hadoop/hadoop-env.sh
как:
export JAVA_HOME=/usr/lib/jvm/<jdk folder>
Я работаю с Ubuntu 12.04 LTS.
Я прохожу через руководство quickstart из хаупов, чтобы выполнить псевдораспределение. Это кажется простым и простым (легко!).
Однако, когда я пытаюсь запустить start-all.sh
, я получаю:
localhost: Error: JAVA_HOME is not set.
Я прочитал все другие рекомендации по stackoverflow для этой проблемы и сделал следующее, чтобы установить JAVA_HOME
:
В /etc/hadoop/conf/hadoop-env.sh
я установил
JAVA_HOME=/usr/lib/jvm/java-6-oracle
export JAVA_HOME
В /etc/bash.bashrc
я установил
JAVA_HOME=/usr/lib/jvm/java-6-oracle
export JAVA_HOME
PATH=$PATH:$JAVA_HOME/bin
export PATH
which java
возвращает:
/usr/bin/java
java –version
работает
echo $JAVA_HOME
возвращает:
/usr/lib/jvm/java-6-oracle
Я даже пытался стать root и явно писать в терминале:
$ JAVA_HOME=/usr/lib/jvm/java-6-oracle
$ export JAVA_HOME
$ start-all.sh
Если бы вы могли показать мне, как решить эту ошибку, мы будем очень благодарны.
Я думаю, что мой JAVA_HOME
как-то переопределяется. Если это так, не могли бы вы объяснить мне, как сделать мой экспорт глобальным?
Я использую hadoop 1.1, и столкнулся с той же проблемой.
Я решил это путем изменения переменной JAVA_HOME
в /etc/hadoop/hadoop-env.sh
как:
export JAVA_HOME=/usr/lib/jvm/<jdk folder>
Способом решения этой проблемы является экспорт переменной JAVA_HOME в файл conf/hadoop-env.sh.
Неважно, если вы уже экспортировали эту переменную в ~/.bashrc, она все равно покажет ошибку.
Итак, отредактируйте conf/hadoop-env.sh и раскомментируйте строку "экспортировать JAVA_HOME" и добавьте к ней правильный путь к файловой системе, то есть путь к Java JDK.
# Реализация Java для использования. Обязательный параметр.
экспорт JAVA_HOME = "/path/to/java/JDK/"
Способ отладки заключается в том, чтобы поставить "echo $JAVA_HOME" в start-all.sh. Вы используете свою среду hadoop под другим именем пользователя или как себя? Если первое, очень вероятно, что переменная среды JAVA_HOME не установлена для этого пользователя.
Другая потенциальная проблема заключается в том, что вы неправильно указали JAVA_HOME, а предоставленное вами значение не указывает на JDK/JRE. Обратите внимание, что "java" и "java -version" будут работать, даже если JAVA_HOME установлен неверно.
извлечение из etc/hadoop/hadoop-env.sh
Единственной требуемой переменной среды является JAVA_HOME. Все остальные необязательный. При работе с распределенной конфигурацией лучше всего установите JAVA_HOME в этот файл, чтобы он был правильно определен на удаленных узлов.
Это означает, что лучше и рекомендуется установить JAVA_HOME здесь.. хотя существующее определение читает переменную JAVA_HOME. Возможно, он не получил значение JAVA_HOME от ранее установленного значения... стандартное руководство Apache не говорит об этом:(: (
Эта ошибка исходит от строки 180
if [[ -z $JAVA_HOME ]]; then
echo "Error: JAVA_HOME is not set and could not be found." 1>&2
exit 1
fi
в libexec/hadoop-config.sh
.
Попробуйте echo $JAVA_HOME
в этом script. Если он не распознает,
Найдите JAVA_HOME
, используя следующую команду:
$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")
и замените строку
export JAVA_HOME=${JAVA_HOME}
в /etc/hadoop/hadoop-env.sh
с JAVA_HOME вы получили команду сверху.
Я также столкнулся с аналогичной проблемой в hadoop 1.1
Я не заметил, что JAVA_HOME
прокомментирован в: hadoop/conf/hadoop-env.sh
Это было
/#JAVA_HOME=/usr/lib/jvm/java-6-oracle
Пришлось изменить его на
JAVA_HOME=/usr/lib/jvm/java-6-oracle
независимо от дебианского или любого вкуса linux, просто знайте, что ~/.bash_profile
принадлежит определенному пользователю и не является системным.
в псевдораспределенной среде hasoop работает на localhost
, поэтому $JAVA_HOME
в .bash_profile больше не используется.
просто экспортируйте JAVA_HOME в ~/.bashrc
и используйте его в системной области.
Столкнулся с тем же вопросом на Ubuntu LTS 16.04. Запуск bash -vx./bin/hadoop
показал, что он проверял, является ли java каталогом. Поэтому я изменил JAVA_HOME на папку, и это сработало.
++ [[ ! -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.
Поэтому я изменил JAVA_HOME в ./etc/hadoop/hadoop-env.sh
на
export JAVA_HOME=/usr/lib/jvm/java-8-oracle/jre/
и hadoop начинается нормально. Это также упоминается в этой статье.
Проверьте, соответствуют ли ваши альтернативы правильному, вы можете фактически указывать на другую версию и пытаться изменить hasoop-env.sh на другой установленной версии.
-alternatives --install/etc/hadoop/conf [generic_name] [ваш правильный путь] приоритет {для дальнейшей проверки справочной страницы альтернатив}
для установки альтернатив вручную,
alternatives --set [generic name] [ваш текущий путь].
Измените переменную JAVA_HOME
в conf/hadoop-env.sh
export JAVA_HOME=/etc/local/java/<jdk folder>
echo "export JAVA_HOME=/usr/lib/java" >> $HADOOP_HOME/etc/hadoop/hadoop-env.sh
Примечание. Не используйте export JAVA_HOME=${JAVA_HOME}
!