1 文档编写目的
受前段时间Oracle官宣的从2019年1月之后将不再提供免费的的JDK商业版本的影响,Cloudera开始开发基于OpenJDK的Hadoop平台,参考Fayson之前的文章《Java收费,Hadoop怎么办?》。今年11月29日,Cloudera才发布不久的CDH5.16.1正式提供OpenJDK的支持,参考Fayson之前的文章《0466-CDH5.16.1和CM5.16.1的新功能》和《0486-如何将Kerberos的CDH5.16.1从Oracle JDK 1.8迁移至OpenJDK 1.8》。同时12月19日发布的《0487-CDH6.1的新功能》和《0488-Cloudera Manager6.1的新功能》,也开始支持OpenJDK。本文Fayson主要介绍如何将CDH6.1从Oracle JDK迁移到OpenJDK。
JDK的迁移需要重启整个集群,所以对于所有主机的重启你需要规划停机时间。如果你的集群启用了HDFS HA,可以使用滚动重启而不用规划停机时间。本文的方式会直接重启集群,如果是生产系统,需要规划停机时间。
- 内容概述
1.CDH各版本的JDK支持说明
2.迁移JDK
3.检查JDK的使用版本
4.组件功能校验
5.总结
- 测试环境
1.CM和CDH版本为6.1
2.采用root用户操作
3.Redhat7.4
2 CDH各版本的JDK支持说明
Cloudera Manager和CDH需要所有节点都安装了受支持的Java Development Kit (JDK) ,具体受支持的版本如下:
Cloudera Enterprise Version | Supported JDK |
---|---|
5.3 -5.15 | Oracle JDK 1.7, Oracle JDK 1.8 |
5.16 | Oracle JDK 1.7, Oracle JDK 1.8, OpenJDK 1.8 |
6.0 | Oracle JDK 1.8 |
6.1 | Oracle JDK 1.8, OpenJDK 1.8 |
3 迁移JDK
1.首先我们确认一下CDH集群的各个节点的JDK安装情况
[root@ip-172-31-6-83 shell]# sh ssh_do_all.sh node.list "yum list installed |grep oracle"
可以注意到Fayson集群的的4个节点既安装了Oracle JDK1.7也安装了1.8。
2.我们在Cloudera Manager的页面上确认集群目前在使用的JDK版本。进入Cloudera Manager主页,然后点击“Support > About”。
集群使用的JDK是Oracle JDK1.8
3.安装Redhat自带的OpenJDK到各台节点,使用yum命令进行安装。
[root@ip-172-31-6-83 shell]# sh ssh_do_all.sh node.list "yum -y install java-1.8.0-openjdk-devel"
4.登录到Cloudera Manager节点,编辑以下目录的文件
/etc/default/cloudera-scm-server
增加以下内容:
export JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk"
注意:OpenJDK的安装目录根据实际情况可能不同,请根据实际情况调整。
5.重启Cloudera Manager Server
[root@ip-172-31-6-83 shell]# systemctl restart cloudera-scm-server
6.查看Cloudera Manager已经使用的是OpenJDK
7.移除所有节点的Oracle JDK
[root@ip-172-31-6-83 shell]# sh ssh_do_all.sh node.list "yum -y remove oracle-j2sdk1.7"
[root@ip-172-31-6-83 shell]# sh ssh_do_all.sh node.list "yum -y remove oracle-j2sdk1.8"
8.重启Cloudera Management Service
重启整个集群服务
4 检查JDK的使用版本
1.以Cloudera Management Service的其中一个服务Alert Publisher为例进行查看,首先我们在Cloudera Manager的界面查看进程ID
到后台查看该进程的环境变量
可以发现已经是openJDK
2.再以YARN的ResourceManager服务为例查看使用的JDK版本,我们依旧到Cloudera Manager上查看进程ID
到后台终端确认ResourceManger服务的环境变量
可以看到已经是使用的OpenJDK
5 组件功能校验
1.Kerberos环境下提交MapReduce作业
[root@ip-172-31-6-83 java]# kinit fayson
JAR does not exist or is not a normal file: /opt/cloudera/parcels/CDH-6.1.0-1.cdh6.1.0.p0.770702/lib/hadoop-0.20-mapreduce/hadoop-examples.jar
[root@ip-172-31-6-83 java]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: fayson@FAYSON.