我目前在CentOS 6.5上使用java jdk1.7安装了CDH 5,我试图让CDH使用jdk1.8。
我知道Java 1.8不是推荐的CDH版本,但它只是一个测试集群,所以它不是什么大问题。
我使用RPM安装从Oracle网站安装了Java 1.7和Java 1.8,因此两个版本的Java目前都在/usr/java
下。使用ls -ld
我的Java目录如下:
/usr/java/default -> /usr/java/latest
/usr/java/jdk1.7.0_75
/usr/java/jdk1.8.0_31
/usr/java/latest -> /usr/java/jdk1.8.0_31
我还在/etc/profile.d
设置了脚本,将$JAVA_HOME
设置为/usr/java/default
。我的profile.d脚本的内容:
export JAVA_HOME=/usr/java/default
export PATH=${JAVA_HOME}/bin:${PATH}
所以当我觉得我有这个权利时,我会跑:
$ which java
/usr/java/default/bin/java
告诉我它指向默认情况下Java符号链接的版本。为了确定正在运行的java版本,我运行:
$ java -version
java version "1.8.0_31"
Java(TM) SE Runtime Environment (build 1.8.0_31-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.31-b07, mixed mode)
我可以看到我当前正在运行Java 1.8。
除非我尝试启动Hadoop服务,否则一切看起来都很棒。最容易启动的是ZooKeeper,因为它只有一个服务。 HDFS有多个服务器,因此只需启动和停止ZooKeeper即可。
使用以下命令启动ZooKeeper:
$ sudo service zookeeper-server start
然后检查它正在运行的java版本,我在java
的正在运行的进程列表中搜索:
$ ps -ef | grep java
495 7170 1 7 12:27 ? 00:00:00 /usr/java/jdk1.7.0_75/bin/java -Dzookeeper.datadir.autocreate=false -Dzookeeper.log.dir=/var/log/zookeeper -Dzookeeper.root.logger=INFO,ROLLINGFILE -cp /usr/lib/zookeeper/bin/../build/classes:/usr/lib/zookeeper/bin/../build/lib/*.jar:/usr/lib/zookeeper/bin/../lib/slf4j-log4j12.jar:/usr/lib/zookeeper/bin/../lib/slf4j-log4j12-1.7.5.jar:/usr/lib/zookeeper/bin/../lib/slf4j-api-1.7.5.jar:/usr/lib/zookeeper/bin/../lib/netty-3.2.2.Final.jar:/usr/lib/zookeeper/bin/../lib/log4j-1.2.16.jar:/usr/lib/zookeeper/bin/../lib/jline-0.9.94.jar:/usr/lib/zookeeper/bin/../zookeeper-3.4.5-cdh5.3.0.jar:/usr/lib/zookeeper/bin/../src/java/lib/*.jar:/etc/zookeeper/conf::/etc/zookeeper/conf:/usr/lib/zookeeper/*:/usr/lib/zookeeper/lib/* -Dzookeeper.log.threshold=INFO -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false org.apache.zookeeper.server.quorum.QuorumPeerMain /etc/zookeeper/conf/zoo.cfg
我知道在屏幕上运行,重要的一点是Zookeeper是由/usr/java/jdk1.7.0_75/bin/java
启动的。
为了解决这个问题,我尝试了一些方法:
分别在/etc/hadoop/conf
和/etc/zookeeper/conf
下查看Hadoop和ZooKeeper的conf文件。
我没有找到任何设置JAVA_HOME
。
查看/usr/bin/zookeeper
脚本以查看是否在其他地方设置了JAVA_HOME
,
我确实发现脚本/usr/lib/bigtop-utils/bigtop-detect-javahome
能够设置JAVA_HOME
,但我的profile.d脚本会覆盖该脚本。
将/usr/java/jdk1.7
手动移至/tmp
。
可悲的是,这是唯一可行的。当我将jdk1.7目录移动到另一个目录并启动ZooKeeper时,它将使用Java 1.8。移回jdk1.7目录,使用Java 1.7恢复到ZooKeeper。
有没有人处理过这个问题,有没有人知道如何处理这个问题?我觉得我已经正确设置了Java,但有些东西告诉ZooKeeper / Hadoop使用旧版本的Java?
答案 0 :(得分:3)
我不想回答我自己的问题,但答案是:
$JAVA_HOME
的错误版本设置有两个原因:
使用命令service
删除大多数环境变量。来自man service
:
service runs a System V init script in as predictable environment as
possible, removing most environment variables and with current work-
ing directory set to /.
/usr/lib/bigtop-utils/bigtop-detect-javahome
脚本可以使用环境变量BIGTOP_JAVA_MAJOR
进行配置,以手动设置要使用的Java版本。我尝试将其设置为环境变量,但是service
将其删除:(。请注意,此脚本将找到所有版本的Java,但优先顺序为Java 6,Java 7,Java 8,Open Java。所以如果你安装了Java 6和8,那么它将优先选择6而不是8。
简而言之,为了解决我的问题,我将以下内容添加到/usr/lib/bigtop-utils/bigtop-detect-javahome
的顶部:
BIGTOP_JAVA_MAJOR=8
您还可以在此文件中设置JAVA_HOME
以指定特定版本或路径。
答案 1 :(得分:3)
我来到这里是因为我正在寻找在最新的Coudera QuickStart VM 5.8上将JDK从1.7升级到1.8的方法(不能相信它们默认情况下还会用JDK1.7发货!)。上述答案中的提示和建议有很大帮助 - 但由于他们没有列出完成升级的完整步骤 - 我想我会补充一点来帮助像我这样的人。
因此,以下是将Cloudera QuickStart VM从JDK1.7升级到1.8的一整套步骤:
检查您当前的JDK版本 - 开箱即用:
[cloudera@quickstart ~]$ java -version
java version "1.7.0_67"
Java(TM) SE Runtime Environment (build 1.7.0_67-b01)
Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)
下载所需版本的JDK1.8.xx - 在我的情况下:jdk-8u111-linux-x64.tar.gz
用户' cloudera':
解压并将生成的jdk1.8.0_111目录移动到/ usr / java目录:
tar xzf jdk-8u111-linux-x64.tar.gz
sudo mv -f jdk1.8.0_111 /usr/java
关闭所有Hadoop服务:
$ for x in `cd /etc/init.d ; ls hadoop-*` ; do sudo service $x stop ; done
更新bigtop-utils文件 - 将JAVA_HOME设置为新的JDK:
sudo vi /etc/default/bigtop-utils
updated lines:
# Override JAVA_HOME detection for all bigtop packages
export JAVA_HOME=/usr/java/jdk1.8.0_111
更新' cloudera'用户的.bash_profile - 导出JAVA_HOME并添加更新路径:
export JAVA_HOME=/usr/java/jdk1.8.0_111
PATH=$JAVA_HOME/bin:$PATH:$HOME/bin
export PATH
重启您的虚拟机
检查Java版本 - 现在应该是1.8版本:
[cloudera@quickstart ~]$ java -version
java version "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)
顺便说一下,我没有使用'最新的'设置/ usr / java / default。为了简单起见,sym link就像@ milk3422那样,但它也会起作用。
谢谢!
答案 2 :(得分:0)
我遇到了同样的问题。我设置了
JAVA_HOME=... below the file /usr/lib/bigtop-utils/bigtop-detect-javahome
覆盖默认检测值。这很棒!
答案 3 :(得分:0)
Java可在Web UI中配置。打开Cloudera Manger - >主持人 - >配置 - >高级,然后设置JAVA HOME。这取代了CDH的Java检测机制。