Вопрос или проблема
Я работаю с установкой Hadoop, сделанной кем-то другим.
Ubuntu 18.04.1 LTS
Версия Hadoop 3.0.3
Java open jdk 11 (автоматический режим) и 8 (ручной режим)
В настоящее время Hadoop работает с Java 11, но я хочу настроить Hadoop для работы с Java 8, потому что Hive не работает с Java 11.
Ниже приведена конфигурация Java в моей виртуальной машине.
hadoop@hadoop-VirtualBox:~$ whereis java
java: /usr/bin/java /usr/share/java /usr/share/man/man1/java.1.gz
hadoop@hadoop-VirtualBox:~$ update-alternatives --list java
/usr/lib/jvm/java-11-openjdk-amd64/bin/java
/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
hadoop@hadoop-VirtualBox:~$ java -version
openjdk version "10.0.2" 2018-07-17
OpenJDK Runtime Environment (build 10.0.2+13-Ubuntu-1ubuntu0.18.04.1)
OpenJDK 64-Bit Server VM (build 10.0.2+13-Ubuntu-1ubuntu0.18.04.1, mixed mode)
hadoop@hadoop-VirtualBox:~$ sudo update-alternatives --config java
Есть 2 варианта для альтернативного java (предоставляющего /usr/bin/java).
Выбор Путь Приоритет Статус
------------------------------------------------------------
* 0 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1101 автоматический режим
1 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1101 ручной режим
2 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 ручной режим
hadoop@hadoop-VirtualBox:~$ ls -lh /usr/lib/jvm/
всего 8.0K
lrwxrwxrwx 1 root root 25 Apr 8 14:16 default-java -> java-1.11.0-openjdk-amd64
lrwxrwxrwx 1 root root 21 Apr 21 14:41 java-1.11.0-openjdk-amd64 -> java-11-openjdk-amd64
drwxr-xr-x 9 root root 4.0K Aug 23 12:28 java-11-openjdk-amd64
lrwxrwxrwx 1 root root 20 Apr 26 16:59 java-1.8.0-openjdk-amd64 -> java-8-openjdk-amd64
drwxr-xr-x 7 root root 4.0K Aug 17 08:24 java-8-openjdk-amd64
Я смотрел на этую тему, чтобы настроить Java, однако в файлах .bashrc или /etc/environment нет записи о JAVA_HOME. Единственное место, где указано JAVA_HOME, это в файле /usr/local/hadoop/etc/hadoop/hadoop-env.sh. В файле JAVA_HOME указан следующим образом:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
С вышеуказанной конфигурацией Hadoop работает без каких-либо проблем. Я пытался изменить JAVA_HOME в файле hadoop-env.sh на /usr/lib/jvm/java-8-openjdk-amd64 и пытался запустить Hadoop. Но это вызывает ошибку
Нераспознанная опция: --add-modules Ошибка: Не удалось создать виртуальную машину Java. Ошибка: Произошло фатальное исключение. Программа завершит работу.
Я пытался изменить приоритет версии Java с помощью sudo update-alternatives –config java вместе с изменением hadoop-env.sh, но ошибка по-прежнему остается той же.
Чтобы изменить версию Java, нужно ли мне добавить путь в .bashrc и /etc/environment также? Я хотел бы знать, какие изменения нужно внести.
Убедитесь, что у вас есть проверенная резервная копия сначала.
Большая часть экосистемы Hadoop поддерживает только Java 8. Scala, Spark и т. д. Однако, при установке Hadoop, JAVA_HOME нужно настроить в первую очередь.
Вам необходимо удалить Java 11 перед установкой Java 8. Для системы Hadoop будет лучше получить сообщение об ошибке, чтобы помочь определить, где проблема, чем иметь разные JVM (Java 11 и Java 8). Примечание: я предполагаю, что Hadoop запускается автоматически при старте системы, поэтому вам определенно нужно удалить Java 11.
Затем вам нужно пройти через каждый файл конфигурации Hadoop, чтобы дважды проверить, что JAVA_HOME не был настроен. Для Ubuntu это, как правило, /usr/local/hadoop/etc/hadoop
, но может быть любым, что хотел предыдущий администратор ($HADOOP_HOME/etc/hadoop
). Поиск во всей директории с помощью grep поможет ускорить процесс. Это касается каждого дополнительного продукта, такого как Hive, HBase и т. д. Вам может повезти, что только hadoop-env.sh имеет настроенный JAVA_HOME.
Также проверьте скрипты инициализации в /etc/init.d
После перезагрузки Hadoop, проверьте файлы журналов. Я бы также остановил и перезапустил каждую службу по одной и проверил вывод.
Ответ или решение
Чтобы настроить переменную окружения JAVA_HOME
для работы с Hadoop 3.0.3 в Ubuntu 18.04.1 LTS, имея установленные несколько версий Java (OpenJDK 8 и OpenJDK 11), вам необходимо следовать нескольким шагам. Важно учитывать, что многие компоненты экосистемы Hadoop, такие как Hive, не поддерживают Java 11, что делает использование Java 8 необходимым.
1. Настройка JAVA_HOME
Переменная JAVA_HOME
— это ключевой параметр, который указывает путь к установленной версии Java, используемой Hadoop. Вы уже нашли, что JAVA_HOME
указана в файле hadoop-env.sh
. Вам нужно изменить ее значение, соответствующее установленной Java 8.
- Редактируйте hadoop-env.sh:
Откройте файл для редактирования:sudo nano /usr/local/hadoop/etc/hadoop/hadoop-env.sh
Измените строку:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
На:
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
2. Убедитесь, что Java переключена на версию 8
Используйте команду update-alternatives
, чтобы убедиться, что все альтернативы Java выставлены корректно.
-
Проверьте текущую версию Java:
java -version
-
Если вывод показывает, что используется Java 11, измените настройки Java:
sudo update-alternatives --config java
Выберите версию Java 8 из представленных вариантов.
3. Проверка переменной окружения JAVA_HOME
Хотя JAVA_HOME
определена в hadoop-env.sh
, вы также можете установить ее в вашем пользовательском профиле для гарантии:
-
Откройте файл
.bashrc
:nano ~/.bashrc
-
Добавьте следующую строку в конец файла:
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
-
Примените изменения:
source ~/.bashrc
4. Перезапуск Hadoop
После того как вы изменили JAVA_HOME
, перезапустите все службы Hadoop, чтобы настройки вступили в силу. Если Hadoop работает как сервис, вы можете использовать следующую команду:
sudo systemctl restart hadoop
5. Проверка конфигурационных файлов
Помимо изменения hadoop-env.sh
, рекомендуется просмотреть другие конфигурационные файлы Hadoop на наличие переменной JAVA_HOME
:
grep -R "JAVA_HOME" /usr/local/hadoop/etc/hadoop
Это позволит убедиться, что JAVA_HOME
не определена повторно в других файлах, что могло бы вызвать конфликт.
6. Логи и отладка
После перезапуска запустите Hadoop и проверьте логи на наличие ошибок. Логи можно найти по умолчанию в директории логов Hadoop. Если ошибки продолжают возникать, внимательно изучите сообщения об ошибках для диагностики.
Заключение
Следуя вышеуказанным шагам, вы сможете правильно настроить JAVA_HOME
для работы Hadoop с Java 8. Гарантируйте, что у вас актуальные версии всех компонентов и протестируйте систему после внесения изменений. Это обеспечит корректное взаимодействие Hadoop с другими сервисами, такими как Hive, минимизируя возможность конфликтов между версиями Java.