![有多个 Java 版本时为 Hadoop 3.0.3 配置 JAVA HOME](https://linux22.com/image/1009372/%E6%9C%89%E5%A4%9A%E4%B8%AA%20Java%20%E7%89%88%E6%9C%AC%E6%97%B6%E4%B8%BA%20Hadoop%203.0.3%20%E9%85%8D%E7%BD%AE%20JAVA%20HOME.png)
我正在研究其他人完成的 Hadoop 安装。
Ubuntu 18.04.1 LTS
Hadoop version 3.0.3
Java open jdk 11 (auto mode) and 8 (manual mode)
目前 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
There are 2 choices for the alternative java (providing /usr/bin/java).
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1101 auto mode
1 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1101 manual mode
2 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 manual mode
hadoop@hadoop-VirtualBox:~$ ls -lh /usr/lib/jvm/
total 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
我当时正在看此主题但是在 .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 运行没有任何问题。我尝试将 hadoop-env.sh 文件中的 JAVA_HOME 更改为 /usr/lib/jvm/java-8-openjdk-amd64,并尝试运行 Hadoop。但这会出现错误
Unrecognized option: --add-modules Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit.
我尝试使用以下方法更改 Java 版本的优先级sudo 更新替代方案 --config java以及 hadoop-env.sh 的改变但仍然出现相同的错误。
为了更改 Java 版本,我是否也需要将路径添加到 .bashrc 和 /etc/environment?我想知道需要进行哪些更改。
答案1
首先确保您有一个已经验证的备份。
很多Hadoop生态圈只支持Java 8,Scala,Spark等等,但是在安装Hadoop的时候需要先设置JAVA_HOME。
在安装 Java 8 之前,您需要卸载 Java 11。对于 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 中的 init 启动脚本
重启 Hadoop 后,查看日志文件。我还会逐个关闭并重启每个服务,然后查看输出。