mil*_*422 6 java hadoop cloudera-cdh
我目前在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
Run Code Online (Sandbox Code Playgroud)
我也设置了脚本/etc/profile.d设置$JAVA_HOME为/usr/java/default.我的profile.d脚本的内容:
export JAVA_HOME=/usr/java/default
export PATH=${JAVA_HOME}/bin:${PATH}
Run Code Online (Sandbox Code Playgroud)
所以,当我觉得我有这个权利时,我会跑:
$ which java
/usr/java/default/bin/java
Run Code Online (Sandbox Code Playgroud)
告诉我它指向默认的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)
Run Code Online (Sandbox Code Playgroud)
我可以看到我当前正在运行Java 1.8.
除非我尝试启动Hadoop服务,否则一切看起来都很棒.最容易启动的是ZooKeeper,因为它只有一个服务.HDFS有多个服务器,因此只需启动和停止ZooKeeper即可.
使用以下命令启动ZooKeeper:
$ sudo service zookeeper-server start
Run Code Online (Sandbox Code Playgroud)
然后检查它运行的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
Run Code Online (Sandbox Code Playgroud)
我知道,屏幕上运行,重要的是Zookeeper正在启动/usr/java/jdk1.7.0_75/bin/java.
为了解决这个问题,我尝试了一些方法:
下看的Hadoop和动物园管理员通过conf文件/etc/hadoop/conf和/etc/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_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 /.
Run Code Online (Sandbox Code Playgroud)该/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
Run Code Online (Sandbox Code Playgroud)
您还可以JAVA_HOME在此文件中设置指定特定版本或路径。
| 归档时间: |
|
| 查看次数: |
7776 次 |
| 最近记录: |