【发布时间】:2015-03-04 12:37:49
【问题描述】:
我目前在 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?
【问题讨论】:
标签: java hadoop cloudera-cdh