CDH之JDK 版本升级(Open JDK1.8)和cdh升级

目录



一、 JDK 升级为 Open JDK

如果能用 Oracle JDK 是最好的,但有时因为公司的要求,必须使用 Open JDK,尽管CDH 官方文档已经对Open JDK 提供了几个版本的支持,但是在安装时会出现一些问题需要注意,这里以这个以这种情况说明下 CDH 更换为 Open JDK 的方案。

1.1 JDK 版本和问题

常见的 JDK 有 Oracle JDK、和 Open JDK,而常用到的 Open JDK有 Linux yum 原版的 Open JDK、Zulu JDKGraalVM CE JDK

因为 Oracle JDK 的某些原因(比如从 jdk 8 update服务开始收费),可能需要将其更换为 Open JDK。考虑到生产环境对网络有严格的要求,然后考虑选择最后两个备选方案,在CDH升级 OpenJDK GraalVM CE 1.0.0-rc16 时出现了如下的错误:

Error calling jdk.vm.ci.services.Services.serializeSavedProperties
java.io.UTFDataFormatException: encoded string too long: 83554 bytes
	at java.io.DataOutputStream.writeUTF(DataOutputStream.java:364)
	at java.io.DataOutputStream.writeUTF(DataOutputStream.java:323)
	at jdk.vm.ci.services.Services.serializeSavedProperties(Services.java:332)

原因是启动Hive时有在对某些数据encoded为字符串时长多超过了83554 bytes,这个问题可以查看 issues-1203,作者Douglas Simon给出了解决建议,这个问题并将会在下个版本修复,如果使用GraalVM CE JDK建议vm-1.0.0-rc16 之后的版本。

最后决定使用 Zulu JDK,下载zulu8.38.0.13-ca-jdk8.0.212-linux_x64.tar.gz 版本或之后的就基本没问题,在前一个版本安装CDH时,会出现缺少对象的错误,这次目标将JDK升级为如下版本:

[root@cdh3 ~]# java -version
openjdk version "1.8.0_212"
OpenJDK Runtime Environment (Zulu 8.38.0.13-CA-linux64) (build 1.8.0_212-b04)
OpenJDK 64-Bit Server VM (Zulu 8.38.0.13-CA-linux64) (build 25.212-b04, mixed mode)

当我们启动Cloudera Manager Server时,如果是用的 Zulu Open JDK,会报如下错误,这个错误就是 JDK 中缺少Class,无法调用到sun.util.calendar.ZoneInfoFile 进行初始化。

================================================================================
Starting SCM Server. JVM Args: [-Dlog4j.configuration=file:/etc/cloudera-scm-server/log4j.properties, -Dfile.encoding=UTF-8, -Duser.timezone=Asia/Shanghai, -Dcmf.root.logger=INFO,LOGFILE, -Dcmf.log.dir=/var/log/cloudera-scm-server, -Dcmf.log.file=cloudera-scm-server.log, -Dcmf.jetty.threshhold=WARN, -Dcmf.schema.dir=/opt/cloudera/cm/schema, -Djava.awt.headless=true, -Djava.net.preferIPv4Stack=true, -Dpython.home=/opt/cloudera/cm/python, -XX:+UseConcMarkSweepGC, -XX:+UseParNewGC, -XX:+HeapDumpOnOutOfMemoryError, -Xmx2G, -XX:MaxPermSize=256m, -XX:+HeapDumpOnOutOfMemoryError, -XX:HeapDumpPath=/tmp, -XX:OnOutOfMemoryError=kill -9 %p], Args: [], Version: 6.2.0 (#968826 built by jenkins on 20190314-1704 git: 16bbe6211555460a860cf22d811680b35755ea81)
Server failed.
java.lang.NoClassDefFoundError: Could not initialize class sun.util.calendar.ZoneInfoFile
	at sun.util.calendar.ZoneInfo.getTimeZone(ZoneInfo.java:589)
	at java.util.TimeZone.getTimeZone(TimeZone.java:560)
	at java.util.TimeZone.setDefaultZone(TimeZone.java:666)
	at java.util.TimeZone.getDefaultRef(TimeZone.java:636)
	at java.util.Date.normalize(Date.java:1197)
	at java.util.Date.toString(Date.java:1030)
	at java.lang.String.valueOf(String.java:2994)
	at java.lang.StringBuilder.append(StringBuilder.java:131)
	at org.springframework.context.support.AbstractApplicationContext.toString(AbstractApplicationContext.java:1367)
	at java.lang.String.valueOf(String.java:2994)
	at java.lang.StringBuilder.append(StringBuilder.java:131)
	at org.springframework.context.support.AbstractApplicationContext.prepareRefresh(AbstractApplicationContext.java:583)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:512)
	at org.springframework.context.access.ContextSingletonBeanFactoryLocator.initializeDefinition(ContextSingletonBeanFactoryLocator.java:143)
	at org.springframework.beans.factory.access.SingletonBeanFactoryLocator.useBeanFactory(SingletonBeanFactoryLocator.java:383)
	at com.cloudera.server.cmf.Main.findBeanFactory(Main.java:481)
	at com.cloudera.server.cmf.Main.findBootstrapApplicationContext(Main.java:472)
	at com.cloudera.server.cmf.Main.bootstrapSpringContext(Main.java:375)
	at com.cloudera.server.cmf.Main.<init>(Main.java:260)
	at com.cloudera.server.cmf.Main.main(Main.java:233)
================================================================================

1.1.1 CDH不同版本支持的JDK列表:

Supported JDKs
Supported JKDs

1.1.2 注意

虽然如上表CDH最新的5.x版本和CDH6.x版本都支持Open JDK,但Open JDK因为是不同公司使用的开源源码自行编译的,和Oracle JDK难免有细微的差异。

就如上面所说,不同的Open JDK有差异,不同的小版本也会有差异,使用不同版本的Open JDK安装CDH或升级CDH时难免会有问题,如果是更改为Open JDK,可以下载对应版本的较新版本升级;如果是升级CDH版本,比如升级其中组件,因为CDH新版本中一些组建已经不再单独发送,而是和CDH Parcel一起发放,在启动 Cloudera Manager Server 时,时区方法初始化是调用了某个方法,这个方法在测试的Open JDK 都是缺失的,因此建议更换为 Oracel JDK 升级 CDH,CDH升级完稳定后再更换为Open JDK;如果是安装CDH,JDK的问题也可以安装升级CDH的思路配置JDK


1.2 CDH 6.X之JDK升级

这里以CDH 6.2.0 升级为例。

1.2.1 升级JDK

  • 下载JDK(Oracle JDKzulu JDK
    # 本次使用OpenJDK中的 zulu JDK 1.8
    wget https://cdn.azul.com/zulu/bin/zulu8.42.0.21-ca-jdk8.0.232-linux_x64.tar.gz
    
  • 安装 JDK
  • 配置JAVA_HOME,配置 /etc/profile ,添加如下配置(经验性配置,且推荐这样配置):
    ### set java environment
    #JAVA_HOME=/usr/java/jdk1.8.0_181-cloudera
    JAVA_HOME=/usr/local/zulu8
    JRE_HOME=$JAVA_HOME/jre
    CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
    PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
    export JAVA_HOME JRE_HOME CLASS_PATH PATH
    
  • Cloudera Manager Server 主机上修改/etc/default/cloudera-scm-server,添加:export JAVA_HOME=/usr/local/zulu8

1.2.2 重启 Cloudera 服务

执行如下命令,如果有问题可以查看/var/log/cloudera-scm-server/下的日志信息解决。

# Agent 端执行
sudo systemctl  stop cloudera-scm-agent

# Server 端执行
sudo systemctl restart cloudera-scm-server

# Agent 端执行
sudo systemctl  start cloudera-scm-agent

1.2.3 Cloudera Manager页面配置

打开浏览器,登陆Cloudera Manager 页面。

主机  >  所有主机  >  配置  >  高级  >  Java 主目录

Java 主目录 右侧框中输入$JAVA_HOME的路径。

cdh-6.2.0-jdk-update

1.2.4 重启集群

在页面上重启集群,包括Cloudera Management Service和各组件服务。


1.3 CDH 5.X之JDK升级

这里以CDH 5.16.1 升级为例。同样也使用于 CDH 6.x

1.3.1. 关闭所有节点的cloudera manager

比如现在有三个节点:cdh1、cdh2、cdh3。
cdh1是server端,cdh1、cdh2、cdh3是agent端。

分别关闭三个节点的 agent 服务

/opt/cm-5.16.1/etc/init.d/cloudera-scm-agent stop

最后关闭 cdh1 节点的 server 服务

/opt/cm-5.16.1/etc/init.d/cloudera-scm-server stop

1.3.2 下载并安装open jdk1.8

下载并解压,然后配置环境变量

### set java environment
JAVA_HOME=/usr/local/zulu8
JRE_HOME=$JAVA_HOME/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH

1.3.3 修改 cdh 配置文件的 JAVSA_HOME

修改各节点 /opt/cm-5.16.1/etc/default 的两个文件,添加 export JAVA_HOME= 配置项

vim /opt/cm-5.16.1/etc/default/cloudera-scm-server 
export JAVA_HOME=/usr/local/zulu8

vim /opt/cm-5.16.1/etc/default/cloudera-scm-agent 
export JAVA_HOME=/usr/local/zulu8

1.3.4 启动 cloudera manager

在 cdh1 节点启动 server

/opt/cm-5.16.1/etc/init.d/cloudera-scm-server start

在 cdh1、cdh2、cdh3 节点启动 agent

/opt/cm-5.16.1/etc/init.d/cloudera-scm-agent start

1.3.5 启动之后需要在cloudera manager 修改 Java 配置

  • 主机 --> 所有主机 --> 配置 --> 高级 --> Java 主目录
  • 值修改为新的 JAVA_HOME 所在的目录
    CDH-JAVA-HOME
  • 单击保存更改。
  • 重启所有服务。

1.4 CDH 官方 jdk升级文档

升级过程遇到其他问题,可以查看官方文档 Upgrading the JDK




二、 CDH 升级

这里演示 cdh 6.2.0 升级到 cdh 6.3.1 。其它版本的升级类似。

2.1 备份

这一步可选,为了防止升级过程的意外,最好先进行如下操作,进行备份。如果发生问题,需要回退可以参考官网文档 Reverting a Failed Cloudera Manager Upgrade

# 0 查看系统
lsb_release -a

# 1 创建一个顶级备份目录。(各个节点执行)
export CM_BACKUP_DIR="`date +%F`-CM6.2.0"
echo $CM_BACKUP_DIR
mkdir -p $CM_BACKUP_DIR

# 2 备份 Agent 目录和运行时状态。(Agent 节点执行)
sudo -E tar -zcPf $CM_BACKUP_DIR/cloudera-scm-agent.tar.gz --exclude=*.sock /etc/cloudera-scm-agent /etc/default/cloudera-scm-agent /var/run/cloudera-scm-agent /var/lib/cloudera-scm-agent

# 3 备份现有的存储库目录。
sudo -E tar -zcPf $CM_BACKUP_DIR/repository.tar.gz /etc/yum.repos.d

# 4 备份Cloudera Management Service
## 4.1 在 Service Monitor 角色的机器上备份以下目录: (cdh 页面可以看到:例如 cdh2 节点)
sudo cp -rp /var/lib/cloudera-service-monitor /var/lib/cloudera-service-monitor-`date +%F`-CM6.2.0
## 4.2 在 Host Monitor  角色的机器上备份以下目录: (例如 cdh3 节点)
sudo cp -rp /var/lib/cloudera-host-monitor /var/lib/cloudera-host-monitor-`date +%F`-CM6.2.0
## 4.3 在  Event Server 角色的机器上备份以下目录: (例如 cdh3 节点)
sudo cp -rp /var/lib/cloudera-scm-eventserver /var/lib/cloudera-scm-eventserver-`date +%F`-CM6.2.0

# 5 停止 Cloudera Manager Server 和 Cloudera Management Service
## 5.1 CDH 页面 停止 Cloudera Management Service
## 5.2 在 Cloudera Manager Server 机器上执行如下命令关闭 Cloudera Manager Server
sudo systemctl stop cloudera-scm-server

# 6 备份 Cloudera Manager 数据库
## 6.1 在元数据节点 查看数据库配置信息
cat /etc/cloudera-scm-server/db.properties
## 6.2 备份 MySQL 数据
##  数据库默认的有 scm、rman、nav、navms、amon,同时如果有也可以把剩余的 hue、metastore、sentry、oozie 备份
mysqldump --databases database_name --host=cdh1 --port=3306 -u scm -p > $CM_BACKUP_DIR/database_name-backup-`date +%F`-CM6.2.0.sql

# 7 备份 Cloudera Manager Server
sudo -E tar -zcPf $CM_BACKUP_DIR/cloudera-scm-server.tar.gz /etc/cloudera-scm-server /etc/default/cloudera-scm-server

2.2 升级 Cloudera Manager

2.2.1 升级 Server

如果集群环境可以访问 https://archive.cloudera.com,则可以直接使用官网提供的公共存储库。package manager 会使用这个下载并安装最新版本的 Cloudera Manager 软件包。如果无法访问 Internet,需要配置自己内网的资源镜像服务,将 package repository,根据文档说明下载到本地,例如 http://MyWebServer:port/cloudera-repos

如果集群节点比较多时,建议使用第二种离线方式

将各个节点的存储库文件/etc/yum.repos.d/cloudera-manager.repo改为如下

[cloudera-manager]
# Packages for Cloudera Manager
name=Cloudera Manager
baseurl=https://archive.cloudera.com/cm6/6.3.1/redhat7/yum/
gpgkey=https://archive.cloudera.com/cm6/6.3.1/redhat7/yum/RPM-GPG-KEY-cloudera
gpgcheck=1
# 查看确定哪些软件包可以安装或升级
yum deplist cloudera-manager-agent

升级 Cloudera Manager Server

  • 停止 Cloudera Management Service 。登陆到Cloudera Manager Admin,关闭此服务。
  • 停止 Cloudera Manager Agent。因为前面已经停止了Cloudera Manager Server,这里直接停止 Agent 服务。
sudo systemctl stop cloudera-scm-agent
  • 升级包
# 1 clean yum
sudo yum clean all

# upgrade server。在 server 节点执行
# 如果中间有提示 db.properties ,回答 N
# 如果有提示 GPG key ,回答 Y
# 如果中间获取资源时失败可以重新执行
sudo yum upgrade cloudera-manager-server cloudera-manager-daemons cloudera-manager-agent 

# upgrade agent。在其余 agent 执行
sudo yum upgrade cloudera-manager-daemons cloudera-manager-agent 

# 验证是否升级安装成功
rpm -qa 'cloudera-manager-*'

# 启动 Cloudera Manager Agent.(可选,升级后服务已自动启动)
sudo systemctl start cloudera-scm-agent

# 启动 Cloudera Manager Server
sudo systemctl start cloudera-scm-server

# 使用 Web 浏览器打开 Cloudera Manager Admin 控制页面。需要一段时间(几分钟)才能启动。
# 根据提示完成 Agent 服务的升级。
# 中间遇到问题可以查看如下日志
#  server 日志: tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log
#  Agetn 日志:  tail -f /var/log/cloudera-scm-agent/cloudera-scm-agent.log
#  or : tail -f /var/log/messages
http://cdh1:7180/cmf/upgrade 

2.2.2 升级 Agents

当 server 节点升级完毕,Agent 也升级完毕之后,访问 http://cdh1:7180/cmf/upgrade。首先查看 升级的 Agent的主机列表信息,如果有某些节点有问题,可以通过前面提到的日志信息进行排查。然后必须要对 Host 进行检查,点击检查之后,如果没有问题会是一个绿色的对勾,如果有问题,点击 【显示检查器结果】查看警告问题的原因进行排查。

例如当点击 显示检查器结果 查看检查结果,警告提示 The user 'kudu' is not part of group 'hive' on the following hosts:,可以将 kudu用户添加到 hive 的用户组里。其它的原因可以查看我在 CDH 安装的 blog CDH 6.2.0 或 6.3.0 安装实战及官方文档资料链接

# 将 kudu 用户添加的已存在的 hive 组中。
sudo usermod -G hive kudu

# 查看 
cat /etc/group | grep hive
groups kudu

问题排除后,如下图
在这里插入图片描述
审核更改 ↓
审核更改
重启 Cloudera Management ↓
在这里插入图片描述
命令详细信息 ↓
命令详细信息
Upgrade Cloudera Manager ↓。如果没有问题会显示如下页面,最后提示我们访问 Home Page,进行后续的操作。
Upgrade Cloudera Manager

2.2.3 After

进入 Cloudera Manager Admin 页面,调整页面提示的配置。完整之后,重启响应的 组件 服务。按照组件升级的方式下载 Parcel,完成升级。

2.3 升级 CDH

在 Cloudera Manager Admin 页面点击右上角的 cm-icon-parcels 图标(小礼物盒子🎁形状的),点击 CDH6 栏下载最新版的 6.3.2-1.cdh6.3.2.p0.1605554 ,下载完毕后点击 【分配】,将包裹分发到各个Agent 节点,完毕之后点击 【升级】,如下图
Parcel 下载、分配、升级

入门 ↓
点击 【Run Host Inspector】和 【Run Service Inspector】进行主机和服务的检查,如果不检查也可以直接勾选 ☑️ Skip this step 跳过检查着一步。然后是数据库的备份,乳沟已经备份了数据库,☑️ 是,我已执行这些步骤,点击继续。
升级-入门页面
重启集群 ↓
升级-重启集群页面
命令详细信息 ↓
升级-命令详细信息页面

汇总 ↓
升级-汇总页面

查看,选择 【主机】 -> 【所有主机】-> 【名称】(例如选择 cdh1 节点) -> 【组件】,可以看到各个组件的版本已经升级到 CDH 6.3.2 的版本。
组件 版本信息

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yore Yuen

你的支持认可是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值