一、前言

1、目的

CDH默认安装的JDK版本为jdk1.7.0_67,部分企业开发环境为JDK8版本,这个时候可能会出现在本地开发的应用在集群中无法正常运行。

2、内容概述

1.准备需要升级的JDK8版本
2.部署准备好的JDK8到集群所有节点
3.Cloudera Manager配置JAVA_HOME
4.验证是否生效

3、测试环境

1.CM和CDH版本为5.16.2
3.RedHat7

4、前置条件

1.CM和CDH5.3或更高版本
2.集群Kerberos运行正常

二、CM和CDH支持的JDK版本

  • CDH支持JDK包括JDK7以及JDK8。Cloudera提供相应JDK包,并可以通过CM自动在集群中部署安装。CDH的版本都能提供对Oracle JDK7的支持,而JDK8的支持则需要CDH5.3之后的版本。目前在CDH发行版中自带的JDK版本为1.7.0_67版本。
  1. JDK7支持情况 | 1.7u80 | | —- | | 1.7u75 | | 1.7u67 | | 1.7u55 |

  2. JDK8支持情况 | 1.8u131 | | —- | | 1.8u121 | | 1.8u111 | | 1.8u102 | | 1.8u91 | | 1.8u74 | | 1.8u31 |

建议使用Cloudera官网推荐的JDK版本。

三、JDK8安装包准备
1、在oracle官网下载JDK8的安装包
地址:http://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8
2、安装JDK8的无限制权限策略文件JCE
地址:http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
3、解压下载的两个压缩包
将UnlimitedJCEPolicyJDK8目录下所有文件拷贝至./jdk1.8.0_131/jre/lib/security目录下覆盖原有文件
4、注意:这里我们下载了JDK8的无限制权限策略文件JCE两个jar包,如果你的集群启用了Kerberos则必须要下载JCE的包并覆盖{JAVA_HOME}/jre/lib/security目录下的local_policy.jar和US_export_policy.jar两个包。

四、部署JDK8到集群

1、将jdk1.8.0_131目录拷贝至/usr/java目录下
2、将jdk1.8.0_131-cloudera目录同步至集群所有节点的/usr/java目录下
集群中所有节点jdk1.8.0_131-cloudera的部署目录必须一致
五、Cloudera Manager配置
1、登录Cloudera Manager的Web管理界面,进入主机列表页面
2、点击“配置”进入主机配置页面
3、选择“高级”类别,在Java主目录输入jdk8的路径并保存配置
4、回到CM主页根据页面提示重启相应服务
5、重启成功
六、验证集群JDK8环境
1、使用“ps -ef”命令查看启动的java服务使用的jdk版本
到此为止已将CDH集群JDK版本升级为JDK8,大家可以使用JDK的一些新特性开发,也可以安装Spark2.2、Kafka3等需要JDK8以上版本支持的组件。
2、Kerberos验证
3、MR作业验证

七、常见问题

  1. Cloudera-scm-server使用的jdk版本仍然为jdk7

解决方法:
将CM节点的/usr/java/jdk1.7.0_67-cloudera删除
重启cloudera-scm-server服务

  1. No Java JDK is detected on the host

解决方法:重启此节点的agent服务即可。
至此,如何在Kerberos环境下升级CDH的JDK完毕。注意跟非Kerberos环境下升级,其实就是需要特别注意两个jce文件的替换。