Fayson的github: https://github.com/fayson/cdhproject
推荐关注微信公众号:“Hadoop实操”,ID:gh_c4c535955d0f,或者扫描文末二维码。
本文档讲述如何升级Cloudera Manager和CDH,通过本文档,您将学习到以下知识:
1.如何对Cloudera Manager进行停机升级
2.如何对CDH进行停机升级
3.如何在不影响集群作业的情况下进行CDH滚动升级
文档主要分为以下几步:
1.Cloudera升级概述
2.Minor版本Cloudera Manager和CDH升级
3.Maintenance版本滚动升级CDH
4.滚动升级时进行任务验证
5.集群升级完成后功能验证
这篇文档将重点介绍CDH升级,并基于以下假设:
1.CDH5.4.3环境已搭建并正常运行
2.集群服务(CM、HBase、HDFS、Hive、Hue、Oozie、Spark、Yarn、Zookeeper)
3.Cloudera Manager使用rpm安装
4.CDH使用parcels安装
5.集群未配置Kerberos
以下是本次测试环境,但不是本操作手册的硬限制:
1.操作系统:Redhat6.5
2.旧CM/CDH版本:CM5.4.3/ CDH5.4.3
3.目标CM/CDH的升级版本:CM5.11.1/ CDH5.11.1
4.采用sudo权限的ec2-user用户进行操作
升级建议:
1.针对CDH的Maintenance Version升级,可以使用滚动升级,比如:5.4.x升级到5.4.y,这种版本升级主要修复bug,不改动API,也不涉及新的功能。
2.针对CDH的Minor Version升级,建议停机升级或者滚动升级(如果跨度不大),比如5.x.x升级到5.y.y,这种版本升级主要是增加新的功能和新的API。
3.针对CDH的Major Version升级,建议必须停机升级,而且在升级前需要对已有应用和作业的改造和升级进行完备的测试验证,相应升级时停机时间会较长,这种版本升级一般是Hadoop相关组件的大版本升级,可能会改动API。
下面描述的流程适用于由Cloudera Manager管理的集群,对于不是由Cloudera Manager管理的集群升级,请参考:Upgrading Unmanaged CDH Using the Command Line
你可以使用tarballs或operating system packages来升级Cloudera Manager,然后使用packages或parcels来升级CDH。同时有可能还需要安装一个新版JDK。升级Cloudera Manager的同时Cloudera Navigator也会被升级。
CDH和Cloudera Manager不用同时升级,但是需要保证Cloudera Manager和CDH版本的兼容。Cloudera Manager可以管理当前或以前的major版本的CDH,或相同minor版本的CDH,或较低minor版本的CDH。比如,Cloudear Manager 5.7.1可以管理CDH5.7.2,CDH5.6.1和CDH4.8.6,但是不能管理CDH5.8.1. Cloudera Manager5.x不能管理CDH3.x。
升级时具体有如下几种选择:
一般需要规划一个足够长的维护窗口(停机时间)进行升级。根据需要升级的组件,集群的节点数,以及不同的硬件情况,你可能需要一整天来进行升级。开始升级之前,你需要做好一些前置条件准备以及关键数据备份,这篇文档在讲述升级步骤时也会说明。
升级之前,需要查阅Cloudera Manager的Cloudera Enterprise 5.x Release Notes,了解API更改,不推荐的功能,新的功能以及不兼容的更改。同时需要检查CDH 5 and Cloudera Manager 5 Requirements and Supported Versions来确认支持的操作系统,JDK,数据库和其他组件。
一共有三种版本的升级:major,minor和maintenance。
Major升级
Major版本的升级通常有以下特征:
Hadoop的大版本变化,涉及很多更新内容
你也可以只升级major版本,而保持minor版本不变,比如你可以从4.8.1升级到5.8.0. 为了方便下一个major版本的升级(CDH6),我们建议您现在可以将集群升级到5.x
Minor版本升级
Minor版本升级是指基于同样的major版本将minor版本进行升级,比如从5.4.x升级到5.8.x,一般有以下特征:
一般来说,minor版本的升级不包括不兼容的更改或者数据格式的变化。客户端配置(Client Configuration Files)会被重置。
Maintenance版本升级
Maintenance版本升级主要是重大bug修复或者解决一些安全问题。不会有兼容性修改和新功能。
升级Cloudera Manager包括以下步骤:
1.在CM节点上升级Cloudera Manager Server,使用操作系统的命令,比如Redhat的yum。也可以手动通过tarballs来升级。tarballs升级比较适合集群中已经有一些可以同时操作多台机器的脚本,程序或工具。
2.在所有主机上升级Cloudera Manager agent,Cloudera Manager的升级向导可以帮助你升级agent(JDK升级可选),同时也可以手动的通过tarballs升级JDK和agent。在这个过程中,CDH并不会被升级。
Cloudera Manager升级,可以参考官网文档:Upgrading Cloudera Manager
CDH升级包含Hadoop相关组件的升级,你可以使用Cloudera Manager来升级CDH,采用parcel和package的方式都可以。
我们建议使用parcels来升级CDH,因为Cloudera Manager管理这些parcels自动下载,分发和激活。有两种方式的升级:
使用packages升级需要你提前下载好需要升级的packages,然后手动的运行package更新命令来升级,注意所有主机都需要进行相同的操作。参考:Upgrading to CDH 5.x Using Packages
从Cloudera Manager5.3开始,CDH提供向导式的升级包括major版本升级(CDH5到CDH5),minor版本升级(CDH5.x到5.y)和maintenance版本升级(CDHa.b.x到CDHa.b.y)。无论你是使用parcels安装还是package都支持,但是package需要你手动安装和升级,但是parcels可以被Cloudera Manager自动安装和升级。参考:Upgrading CDH and Managed Services Using Cloudera Manager
当升级Cloudera Manager的时候,Cloudera Navigator Metadata和Audit servers会被自动升级。你还可以升级其他的Navigator组件比如Cloudera Navigator Key Trustee Server, Cloudera Navigator Key HSM和Cloudera Navigator Encrypt。当然也可以选择不升级。参考:Upgrading Cloudera Navigator Components
在升级Cloudera Manager和CDH之前,请确保集群内的所有主机都是使用受支持的Oracle JDK,参考:supported version of the Oracle Java Development Kit (JDK)。同时,所有主机必须使用相同版本的JDK:参考:Upgrading to Oracle JDK 1.8
升级前置条件:
1.确保当前系统版本支持您要升级到的新版本CDH5和Cloudera Manager5
2.原Cloudera Manager和CDH的版本为5.4.3
3.Cloudera Manager和CDH的目标升级版本为5.11.1
本章节主要讲述如何使用RPM包升级Cloudera Manager。
1.准备待升级rpm包
wget http://archive.cloudera.com/cm5/redhat/6/x86_64/cm/5.11.1/RPMS/x86_64/cloudera-manager-agent-5.11.1-1.cm5111.p0.9.el6.x86_64.rpm
wget http://archive.cloudera.com/cm5/redhat/6/x86_64/cm/5.11.1/RPMS/x86_64/cloudera-manager-daemons-5.11.1-1.cm5111.p0.9.el6.x86_64.rpm
wget http://archive.cloudera.com/cm5/redhat/6/x86_64/cm/5.11.1/RPMS/x86_64/cloudera-manager-server-5.11.1-1.cm5111.p0.9.el6.x86_64.rpm
wget http://archive.cloudera.com/cm5/redhat/6/x86_64/cm/5.11.1/RPMS/x86_64/cloudera-manager-server-db-2-5.11.1-1.cm5111.p0.9.el6.x86_64.rpm
wget http://archive.cloudera.com/cm5/redhat/6/x86_64/cm/5.11.1/RPMS/x86_64/enterprise-debuginfo-5.11.1-1.cm5111.p0.9.el6.x86_64.rpm
wget http://archive.cloudera.com/cm5/redhat/6/x86_64/cm/5.11.1/RPMS/x86_64/jdk-6u31-linux-amd64.rpm
wget http://archive.cloudera.com/cm5/redhat/6/x86_64/cm/5.11.1/RPMS/x86_64/oracle-j2sdk1.7-1.7.0+update67-1.x86_64.rpm
2.将下载的安装包放在/var/www/html/cm5.11.1目录下
进入cm5.11.1目录,运行命令:
[ec2-user@ip-172-31-8-141 cm5.11.1]$ sudo createrepo .
3.验证是否能通过浏览器访问
4.配置/etc/yum.repos.d/cloudera-manager.repo文件,内容如下
[cloudera-manager]
name = Cloudera Manager, Version 5.11.1
baseurl = http://archive.cloudera.com/cm5/redhat/6/x86_64/cm/5.11.1/
gpgcheck = 0
5.测试yum源是否正常
[ec2-user@ip-172-31-8-141 yum.repos.d]$ sudo yum clean all
[ec2-user@ip-172-31-8-141 yum.repos.d]$ sudo yum repolist
1.停止Cloudera Management Service服务
2.备份Cloudera Manager数据库,在命令行执行如下命令
Cloudera Manager Server
Cloudera Navigator Audit Server
Cloudera Navigator Metadata Server
Activity Monitor
Reports Manager
[ec2-user@ip-172-31-8-141 cmdb_bak]$ mysqldump -u cm -p --databases cm >cm.dump
[ec2-user@ip-172-31-8-141 cmdb_bak]$ mysqldump -u nas -p --databases nas >nas.dump
[ec2-user@ip-172-31-8-141 cmdb_bak]$ mysqldump -u nms -p --databases nms >nms.dump
[ec2-user@ip-172-31-8-141 cmdb_bak]$ mysqldump -u am -p --databases am >am.dump
[ec2-user@ip-172-31-8-141 cmdb_bak]$ mysqldump -u rm -p --databases rm >rm.dump
查找数据库相关的信息,可从如下文件中查找
Cloudera Manager Server的数据库信息,通过配置文件/etc/cloudera-scm-server/db.properties获取
其它服务的数据库信息,可以通过CM管理界面获取
1.停止Cloudera Management Service服务
2.停止Cloudera Manager Server和agent
停止所有服务器的cloudera-scm-agent服务
[ec2-user@ip-172-31-8-141 ~]$ sudo service cloudera-scm-agent stop
在运行Cloudera Manager服务器的主机上,停止cloudera-scm-server服务
[ec2-user@ip-172-31-8-141 cdh-shell-master]$ sudo service cloudera-scm-server stop
3.在Cloudera Manager上备份以下目录
[ec2-user@ip-172-31-8-141 cm_bak]$ sudo scp -r /etc/cloudera-scm-server/ /home/ec2-user/upgrade/cm_bak/
[ec2-user@ip-172-31-8-141 cm_bak]$ sudo scp -r /etc/cloudera-scm-agent/ /home/ec2-user/upgrade/cm_bak/
注意文件目录权限与原数据目录权限一致。
4.运行以下命令进行Cloudera Manager Server升级
[ec2-user@ip-172-31-8-141 cm_bak]$ sudo yum -y upgrade cloudera-manager-server cloudera-manager-daemons cloudera-manager-agent
检查是否安装成功
[ec2-user@ip-172-31-8-141 cm_bak]$ rpm -qa |grep cloudera-
5.启动Cloudera Manager Server服务
[ec2-user@ip-172-31-8-141 cloudera-scm-agent]$ sudo service cloudera-scm-server start
6.登录Cloudera Manager管理控制台,显示升级向导
7.选择升级Cloudera Manager Agent软件包,继续
8.选择“自定义存储库”,配置2.1.2章节的地址,点击“继续”
9.选择JDK选择,点击“继续”
10.根据要求输入SSH登录凭证,点击“继续”
11.等待安装完成,点击“继续”
12.检查完成,点击“完成”
13.进入审核更改向导界面,点击“继续”
14.选择重启Cloudera Management Service,点击“继续”
15.服务重启成功,点击“完成”
集群服务任在正常运行
Cloudera Manager在升级后报告过时的配置,请重新启动集群服务并重新部署客户端配置
1.查看Cloudera Manager版本
版本显示为升级后版本
2.验证Agent是否向Cloudera Manager发送心跳
默认情况下,该心跳为15s一次;
3.检查所有主机
4.集群历史监控数据
1.选择cdh5.11.1版本下载对应的parcels
wget http://archive.cloudera.com/cdh5/parcels/5.11.1/CDH-5.11.1-1.cdh5.11.1.p0.4-el6.parcel
wget http://archive.cloudera.com/cdh5/parcels/5.11.1/CDH-5.11.1-1.cdh5.11.1.p0.4-el6.parcel.sha1
wget http://archive.cloudera.com/cdh5/parcels/5.11.1/manifest.json
2.将下载下来的3个文件,放在/var/www/html/cdh5.11.1目录下
3.测试通过http是否能正常访问
配置完成后,供后面升级CDH使用
1.停止集群服务
2.备份NameNode上的HDFS Metastore
在NameNode节点上备份该目录到指定目录下
[ec2-user@ip-172-31-8-141 dfs]$ cd /dfs/
[ec2-user@ip-172-31-8-141 dfs]$ sudo tar -czvf /home/ec2-user/upgrade/nn_bak/nn_backup.tar.gz nn/
3.备份数据库
[ec2-user@ip-172-31-8-141 hadoopdb_bak]$ mysqldump -u hue -p --database hue >hue.dump
[ec2-user@ip-172-31-8-141 hadoopdb_bak]$ mysqldump -u hive -p --database metastore >metastore.dump
[ec2-user@ip-172-31-8-141 hadoopdb_bak]$ mysqldump -u oozie -p --database oozie >oozie.dump
[ec2-user@ip-172-31-8-141 hadoopdb_bak]$ mysqldump -u sentry -p --database sentry >sentry.dump
[ec2-user@ip-172-31-8-141 cmdb_bak]$ mysqldump -u cm -p --databases cm >cm.dump
[ec2-user@ip-172-31-8-141 cmdb_bak]$ mysqldump -u nas -p --databases nas >nas.dump
[ec2-user@ip-172-31-8-141 cmdb_bak]$ mysqldump -u nms -p --databases nms >nms.dump
[ec2-user@ip-172-31-8-141 cmdb_bak]$ mysqldump -u am -p --databases am >am.dump
[ec2-user@ip-172-31-8-141 cmdb_bak]$ mysqldump -u rm -p --databases rm >rm.dump
4.向集群中添加新版的CDH存储库
5.运行升级向导
6.进入升级向导界面
7.确认CDH版本是否正确,点击“继续”
8.选择“是”,点击“继续”
9.点击“继续”
10.等待安装完成后,点击“继续”
11.检查主机完成后,点击“继续”
12.选择完整集群升级,点击“继续”
13.等待升级集群命令完成,点击“继续”
14.集群升级成功
15.最终化元数据升级
在最终化元数据之前,进行几天甚至几周的运行观察集群是否正常,在发现所有任务都没有任何异常情况后,再进行最终化元数据操作。一旦进行最终化元数据之后,就不能回滚到老的版本了,除非有数据备份。对NameNode的主备节点都执行最终化元数据升级操作:
1.运行一个MapReduce作业
登录集群服务器,操作如下指令
sudo -u hdfs hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar pi 10 100
2.用Hue测试
Hue正常登录,通过Hue操作HBase,向HBase中新建一个test表
向test表中添加一条数据
数据添加成功
通过hbase-shell查看该表是否存在
3.测试hive
beeline登录hive进行测试
Hue测试hive
能正常查询test表数据
升级前置条件:
1.下载Cloudera Manager的RPM安装包
sudo wget http://archive.cloudera.com/cm5/redhat/6/x86_64/cm/5.10.2/RPMS/x86_64/cloudera-manager-agent-5.10.2-1.cm5102.p0.9.el6.x86_64.rpm
sudo wget http://archive.cloudera.com/cm5/redhat/6/x86_64/cm/5.10.2/RPMS/x86_64/cloudera-manager-daemons-5.10.2-1.cm5102.p0.9.el6.x86_64.rpm
sudo wget http://archive.cloudera.com/cm5/redhat/6/x86_64/cm/5.10.2/RPMS/x86_64/cloudera-manager-server-5.10.2-1.cm5102.p0.9.el6.x86_64.rpm
sudo wget http://archive.cloudera.com/cm5/redhat/6/x86_64/cm/5.10.2/RPMS/x86_64/cloudera-manager-server-db-2-5.10.2-1.cm5102.p0.9.el6.x86_64.rpm
sudo wget http://archive.cloudera.com/cm5/redhat/6/x86_64/cm/5.10.2/RPMS/x86_64/enterprise-debuginfo-5.10.2-1.cm5102.p0.9.el6.x86_64.rpm
sudo wget http://archive.cloudera.com/cm5/redhat/6/x86_64/cm/5.10.2/RPMS/x86_64/jdk-6u31-linux-amd64.rpm
sudo wget http://archive.cloudera.com/cm5/redhat/6/x86_64/cm/5.10.2/RPMS/x86_64/oracle-j2sdk1.7-1.7.0+update67-1.x86_64.rpm
2.将下载的的7个RPM安装包,放在/var/www/html/cm5.10.2目录下
3.在该目录下执行如下命令
[ec2-user@ip-172-31-8-141 cm5.10.2]$ sudo createrepo .
4.通过浏览器测试是否能正常访问
5.修改/etc/yum.repos.d/cloudera-manager.repo配置
[ec2-user@ip-172-31-8-141 cm5.10.2]$ sudo vim /etc/yum.repos.d/cloudera-manager.repo
[cloudera-manager]
name = Cloudera Manager, Version 5.10.2
baseurl = http://ip-172-31-8-141.ap-southeast-1.compute.internal/cm5.10.2
gpgcheck = 0
6.测试Cloudera Manager的yum源是否配置好
[ec2-user@ip-172-31-8-141 cm5.10.2]$ sudo yum clean all
[ec2-user@ip-172-31-8-141 cm5.10.2]$ sudo yum repolist
1.停止Cloudera Management Service服务和Cloudera ManagerService服务
通过Cloudera Manager 控制台,停止ClouderaManagement Service服务
通过如下命令停止Cloudera Manager Server服务
[ec2-user@ip-172-31-8-141 ~]$ sudo service cloudera-scm-server stop
2.备份Cloudera Manager数据库,在命令行执行如下命令
[ec2-user@ip-172-31-8-141 cmdb_bak]$ mysqldump -u cm -p --databases cm >cm.dump
[ec2-user@ip-172-31-8-141 cmdb_bak]$ mysqldump -u am -p --databases am >am.dump
[ec2-user@ip-172-31-8-141 cmdb_bak]$ mysqldump -u rm -p --databases rm >rm.dump
1.确保Cloudera Management Service服务已停止
2.在所有安装Cloudera Manager Agent的主机上执行以下命令,停止Agent服务
[ec2-user@ip-172-31-8-141 cdh-shell-master]$ sudo service cloudera-scm-agent stop
3.向集群提交一个MR作业
4.运行以下命令进行Cloudera Manager Server升级
[ec2-user@ip-172-31-8-141 cm_bak]$ sudo yum -y upgrade cloudera-manager-server cloudera-manager-daemons cloudera-manager-agent
检查是否安装成功
[ec2-user@ip-172-31-8-141 cm_bak]$ rpm -qa |grep cloudera-
5.启动Cloudera Manager Server服务,命令如下
[ec2-user@ip-172-31-8-141 cdh-shell-master]$ sudo service cloudera-scm-server start
6.登录Cloudera Manager控制台,进入显示升级向导
7.选择升级Cloudera Manager Agent,点击“继续”
8.输入Cloudera Manager存储库URL,点击“继续”
9.勾选java选项,点击“继续”
10.输入SSH登录凭证,点击“继续”
11.等待Cloudera Manager Agent升级完成,点击“继续”
12.检查完成后,点击“继续”
13.完成升级,进入升级向导页面
14.根据需要进行修改,点击“继续”
15.重启Cloudera Management Service,点击“继续”
16.点击“完成”,进入Cloudera Manager控制台主页
升级成功,并且Hadoop的相关服务均正常。
17.升级完成MR作业任在运行
18.作业运行成功
19.统计结果
Type | Date | Time | Input_data_size | Duration(s) | Throughput(bytes/s) | Throughput/node |
---|---|---|---|---|---|---|
HadoopWordcount | 2017/8/17 | 12:02:39 | 32849063607 | 991.502 | 33130607 | 33130607 |
1.查看Cloudera Manager版本
版本已显示为5.10.2表明升级成功。
2.验证Agent是否向Cloudera Manager发送心跳
默认情况下,该心跳为15s一次;
3.检查所有主机
4.集群历史监控数据
历史监控数据正常,只有在升级Cloudera Manager Agent时段内无数据。
1.选择cdh5.10.0版本下载对应的parcels
wget http://archive.cloudera.com/cdh5/parcels/5.10.2/CDH-5.10.2-1.cdh5.10.2.p0.5-el6.parcel
wget http://archive.cloudera.com/cdh5/parcels/5.10.2/CDH-5.10.2-1.cdh5.10.2.p0.5-el6.parcel.sha1
wget http://archive.cloudera.com/cdh5/parcels/5.10.2/manifest.json
2.将下载下来的3个文件,放在/var/www/html/cdh5.10.2目录下
3.测试通过http是否能正常访问
配置完成后,供后面升级CDH使用
1.在升级前环境前提交一个WordCount的MapReduce作业
2.查看作业运行情况
3.作业运行完成
4.统计结果
Type | Date | Time | Input_data_size | Duration(s) | Throughput(bytes/s) | Throughput/node |
---|---|---|---|---|---|---|
HadoopWordcount | 2017/8/17 | 11:09:20 | 32849063607 | 984.096 | 33379938 | 33379938 |
根据标识进入CDH存储库URL配置界面
通过Cloudera Manager 控制台配置CDH的存储库URL
保存更改,点击“检查新parcels”
配置成功。
使用如下命令备份HDFS元数据信息
[ec2-user@ip-172-31-8-141 upgrade]$ sudo -u hdfs hadoop dfsadmin -fetchImage /home/ec2-user/upgrade/hdfs_metastore_bak
1.通过Cloudera Manager控制台进入集群升级向导
2.选择CDH版本,点击“继续”
3.勾选后,点击“继续”
4.集群软件检查正常,点击“继续”
5.等待parcels安装成功,点击“继续”
6.主机检查通过,点击“继续”
7.选择滚动升级,根据需要设置参数,点击“继续”
8.滚动升级过程中,向集群提交MR作业
作业正常运行
9.等待滚动升级命令完成,点击“继续”
10.CDH升级完成
11.MR作业运行完成
12.统计结果
Type | Date | Time | Input_data_size | Duration(s) | Throughput(bytes/s) | Throughput/node |
---|---|---|---|---|---|---|
HadoopWordcount | 2017/8/17 | 12:42:04 | 32849063607 | 1042.461 | 31511071 | 31511071 |
1.进入Cloudera Manager控制台主页,查看集群是否正常
2.向集群提交一个MR作业
登录集群服务器,操作如下指令
sudo -u hdfs hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar pi 10 100
作业正常运行
3.用Hue测试
Hue正常登录,通过Hue操作HBase,向test表中添加一条数据
数据添加成功
通过hbase-shell查看新增数据
4.测试Hive
beeline登录hive进行测试
向test表中插入一条数据
查看test表数据
Hue测试hive
能正常查询test表数据,查询结果与命令行一致
5.使用Hue测试Impala
查询test表
命令行查询
执行阶段 | Type | Date | Time | Input_data_size | Duration(s) | Throughput(bytes/s) | Throughput/node |
---|---|---|---|---|---|---|---|
升级前 | HadoopWordcount | 2017/8/17 | 11:09:20 | 32849063607 | 984.096 | 33379938 | 33379938 |
升级CM中 | HadoopWordcount | 2017/8/17 | 12:02:39 | 32849063607 | 991.502 | 33130607 | 33130607 |
升级CDH中 | HadoopWordcount | 2017/8/17 | 12:42:04 | 32849063607 | 1042.461 | 31511071 | 31511071 |
在升级CM的过程中是不会影响作业资源使用;
在进行CDH滚动升级过程中由于重启服务导致计算资源损失,因此作业耗时有所增加。
为天地立心,为生民立命,为往圣继绝学,为万世开太平。
推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。
原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操