今天在安装CDH集群的时候,安装完毕,进行了主机检查,发现集群的节点JDK版本不匹配,于是有了此文.
CDH Manager在默认安装的时候会安装jdk1.6.0_31,但是实际CDH本身运行的环境官方建议为jdk1.7.0_15 文档地址
由于我一开始没有看官方的安装环境要求,于是进行升级,服务器是Centos6.3版本,同事发来一个jdk1.7.0_51,开始进行安装.
一开始直接安装命令如下:
rpm -ivh jdk-7u51-linux-x64.rpm
出现提示:
Preparing... ##################### [100%]
file /etc/init.d/jexec from install of jdk-2000:1.7.0_51-fcs.x86_64 conflicts with file from package jdk-2000:1.6.0_31-fcs.x86_64
大体意思是说/etc/init.d/jexec这个文件前面的jdk1.6已经安装过了,所以没有配置成功.后来找到一篇文章,http://www.petefreitag.com/item/818.cfm原来RPM可以直接升级JDK,命令如下:
rpm -Uvh jdk-7u51-linux-i586.rpm
通过-Uvh参数进行升级,U就是upgrade的意思.
安装完毕之后进行主机检查,发现jdk版本还是不匹配,于是看到了上面提到的官方安装文档,要把jdk切换到1.7.0_15.升级用命令轻松解决了,降级该怎么办...
这里提到一个技巧,就是官方jdk的下载,现在oracle极其恶心,下载jdk还得登录oracle账户,下载速度又特别慢,无意中发现一篇文章,解决了这个问题.
接着说降级,首先我查看了/etc/profile,发现jdk安装完毕之后并没有配置java的环境变量,那为什么可以直接调用java命令呢.Google一番,找到如下文章:JDK RPM Installation for Linux (32-bit)
````
A new service script, named jexec, is added to /etc/init.d. This script allows users to directly execute any standalone JAR file that has an execution permission set.
意思是说官方在RPM包里面加了个脚本,会创建一个叫做jexec的服务,允许用户直接执行java命令.jexec大体内容如下:
```sh
BINFMT_MISC=/proc/sys/fs/binfmt_misc
JEXEC=/usr/java/default/lib/jexec
PKMAGIC="PK\x03\x04"
PKMAGICHEX="504b0304"
NAME=jexec
...
JDK的RPM安装的时候会创建两个软连接,/usr/java/latest
和 /usr/java/default
.
实际就是把java命令指向了实际jdk程序调用的地址.
通过这些,可以想到,只要把软连接替换成jdk1.7_15的目录即可,
执行RPM安装,然后执行:
unlink /usr/java/latest
unlink /usr/java/default
ln -s /usr/java/jdk1.7.0_15 /usr/java/default
ln -s /usr/java/jdk1.7.0_15 /usr/java/latest
搞定收工.