温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。


Fayson的github:

​https://github.com/fayson/cdhproject​


提示:代码块部分可以左右滑动查看噢


本文感谢合合信息_陈雨明提出意见


1.文档编写目的



在前面的文章《​​如何将CDH集群JAVA升级至JDK8​​》有介绍升级方式,在JDK升级至JDK8后CM管理的CMS和CDH各个服务的JDK版本都已升级为相应的版本。但在CM服务重启后依然使用的JDK7的版本。在文中的解决方法是将jdk7的安装目录删除。有热心的粉丝也提到这种方式不能从根本上解决问题,给出了如下解决方法需要修改两个配置文件:


  • 修改/usr/lib64/cmf/service/common/cloudera-config.sh文件,将该文件中77-78行的 JAVA7_HOME_CANDIDATES 与 JAVA8_HOME_CANDIDATES 位置互换


CDH集群升级JDK8后CM服务的JDK版本指定分析_启动脚本


  • /opt/cloudera/parcels/CDH/lib/bigtop-utils/bigtop-detect-javahome文件中82-83行的 JAVA7_HOME_CANDIDATES与JAVA8_HOME_CANDIDATES位置互换


CDH集群升级JDK8后CM服务的JDK版本指定分析_java_02


如上方式修改可以确保CMS和CDH的所有服务使用JDK8的环境变量这里是没有问题的,但Cloudera-scm-server服务使用的JDK版本任然使用的是JDK7。


CDH集群升级JDK8后CM服务的JDK版本指定分析_启动脚本_03


2.cloudera-scm-server服务启动脚本分析



1.在CM部署节点上找到cloudera-scm-server的启动脚本


[root@cdh01 common]# find / -name cloudera-scm-server

(可左右滑动)


CDH集群升级JDK8后CM服务的JDK版本指定分析_启动脚本_04


找到CM服务的启动脚本为/etc/rc.d/init.d/cloudera-scm-serverr,在启动命令脚本中可以看到启动CM服务是调用的/usr/sbin/cmf-server脚本


CDH集群升级JDK8后CM服务的JDK版本指定分析_启动脚本_05


2.通过/usr/sbin/cmf-server服务找到CM服务启动的最终执行脚本为


CDH集群升级JDK8后CM服务的JDK版本指定分析_cloudera_06


3.分析/usr/share/cmf/bin/cmf-server脚本,得出如下结论

在脚本中定义了locate_java_home方法,该方法中初始了JAVA6、OPENJAVA6、JAVA7、OPENJAVA7等不同版本的JDK目录


CDH集群升级JDK8后CM服务的JDK版本指定分析_启动脚本_07


在locate_java_home的方法中有一段根据参数初始化不同版本的JDK环境,这里调试了下BIGTOP_JAVA_MAJOR为空并为指定


CDH集群升级JDK8后CM服务的JDK版本指定分析_cloudera_08


所以上述的判断默认为进入“*)”判断中,这样得到的JAVA_HOME_CANNDIDATES变量为指定的所有版本的JAVA初始化目录,接下来的方法就会在指定的所有JAVA目录中找到可用的JAVA版本。


CDH集群升级JDK8后CM服务的JDK版本指定分析_cloudera_09


这里的这个判断就与我们热情的粉丝提出的一致,将JAVA7和JAVA8的位置互换,因为在对目录循环验证查找可用java命令时会优先验证JAVA8的目录。


3.总结



1.通过CM的启动脚本分析可以看到不同版本的JDK目录是在脚本中写死的,所以我们在部署JDK版本时一定要与脚本中指定的目录前缀一致,如指定JDK8的时需要设置JDK的HOME目录为jdk1.8{.xxx}的方式。像在做JDK升级的时候我们只需要将旧版本的jdk1.7xxx修改一个与默认配置不一致的名字则CM启动时就不会再检索到这个目录。


2.CM服务的启动脚本中实际上是不会涉及到cloudera-config.sh和bigtop-detect-javahome两个脚本。


3.关于cloudera-config.sh和bigtop-detect-javahome两个脚本这两个脚本主要提供给CDH和CMS下所有服务使用,在CM上配置了JDK8的路径后,CDH和CMS服务会在启动前默认的export JAVA_HOME的环境变量,所以这两个脚本中的JAVA环境变量判断部分是不会影响到JDK的版本。



提示:代码块部分可以左右滑动查看噢


为天地立心,为生民立命,为往圣继绝学,为万世开太平。

温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。



推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。

CDH集群升级JDK8后CM服务的JDK版本指定分析_cloudera_10

原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操