CDH CM版本 6.0.1 升级到 CM 6.2.0 当前最新版本(CentOS 7.x)
CDH 的 6.0.1 是一个尴尬的版本,那时候 cloudera 还没有将 spark 更新到 2.4 还使用的是 spark 2.2版本。 但后来我们发现 2.3 | 2.4 更新了非常多的 feature 和修复了一些 bug 以及更新了很多包括 structed streaming 特性。并且最近最新的 6.2.0 将会在不久之后提供 Apache phoenix 的支持。所以我尝试将目前的 CDH 升级一下并且记录下来。
CM 升级:
1. 准备工作:
在进行 CDH minor 版本升级之前需先对 CM 进行升级,CM 对之前的版本向下兼容,比如 6.0.1 不能管理 6.0.1 之上的版本却能管理小于版本号 6.0.1 以下的版本。
follow 官方文档首先我们通过 reference 的第一个链接进入到对 cm 升级准备页面。
然后通过相关命令查看目前主机以及 CM CDH 系统的情况,并将信息填入上面的 prepare my environment 中。下面的升级步骤都会 follow 这里选择的东西不要填错或者乱填
查看 Operating System
lsb_release -a
查看目前 CM 使用的 metastore 情况
cat /etc/cloudera-scm-server/db.properties
新版本 JDK 支持情况
Cloudera Enterprise Version Supported JDK
5.3 -5.15 Oracle JDK 1.7, Oracle JDK 1.8
5.16 and higher .x releases 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
6.2 Oracle JDK 1.8, OpenJDK 1.8
可以看到我们使用的 6.2 版本依然支持 Oracle JDK1.8 所以这一部分我们无需升级。从 6.1 开始 CM 开始支持 OpenJDK 1.8 ,这在之前是不支持的,而且会引发很多 agent 上面的问题。
如果非 Oraclejdk1.8 的同学可能需要对此进行非常多的处理,下面的内容均跳过了重新安装 jdk 的步骤,如果需要参考更全面的信息请参阅官方文档。
下面就是做一些备份数据的工作,通常意义上来说,如果我们进行 major 版本的升级,这一步的工序应该非常多非常复杂,但是进行 minor 或者 maintaince 级别的升级相对来说改动较少会稍微轻松一点,需要注意的地方没有那么多。但是该做的备份我们还是给做上,确保可回滚。
2. 备份相关监控和 scm 数据库组件:
备份 CMA(Cloudera Manager Agent)
创建一个方便使用的环境变量,并且创建备份日期的文件夹一枚
export CM_BACKUP_DIR="`date +%F`-CM6.0.1"
echo $CM_BACKUP_DIR
mkdir -p $CM_BACKUP_DIR
备份跟 CMA 相关的目录信息
sudo -E tar -cf $CM_BACKUP_DIR/cloudera-scm-agent.tar --exclude=*.sock /etc/cloudera-scm-agent /etc/default/cloudera-scm-agent /var/run/cloudera-scm-agent /var/lib/cloudera-scm-agent
备份安装仓库信息
sudo -E tar -cf $CM_BACKUP_DIR/repository.tar /etc/yum.repos.d
先去 admin 界面将 scm action 停止。正常停止所有服务。
然后对 scm 以及 scm agent 进行停机
sudo systemctl stop cloudera-scm-server
sudo systemctl stop cloudera-scm-agent
备份 CMS(Cloudera Management Service) 信息
备份 Service monitor 信息
sudo cp -rp /var/lib/cloudera-service-monitor /var/lib/cloudera-service-monitor-`date +%F`-CM6.0.1
备份 Host monitor 信息
sudo cp -rp /var/lib/cloudera-host-monitor /var/lib/cloudera-host-monitor-`date +%F`-CM6.0.1
备份 Event Server 信息
sudo cp -rp /var/lib/cloudera-scm-eventserver /var/lib/cloudera-scm-eventserver-`date +%F`-CM6.0.1
备份 cms 信息
sudo -E tar -cf $CM_BACKUP_DIR/cloudera-scm-server.tar /etc/cloudera-scm-server /etc/default/cloudera-scm-server
备份 scm 数据库信息
mysqldump --databases database_name --host=database_hostname --port=database_port -u user_name -p > $HOME/database_name-backup-`date +%F`-CM6.0.1.sql
3. 开始升级过程:
注意所有的升级过程期间最好保证 cm 是正常退出的情况包括 scm 和 cm-agent 是停止的情况。并且要保障期间不会有任何快照之类的 job 还在执行,否则可能导致升级之后 cm 起不来。
删除之前所有的 repo 设置
sudo rm /etc/yum.repos.d/cloudera*manager.repo*
添加我们的 6.2.0 的仓库配置
[cloudera-manager]
# Packages for Cloudera Manager
name=Cloudera Manager
baseurl=https://archive.cloudera.com/cm6/6.2.0/redhat7/yum/
gpgkey=https://archive.cloudera.com/cm6/6.2.0/redhat7/yum/RPM-GPG-KEY-cloudera
gpgcheck=
安装 jdk 的步骤我们跳过,因为我们已经是 Oracle1.8 的 jdk 了。
更新 scm
sudo yum clean all
sudo yum upgrade cloudera-manager-server cloudera-manager-daemons cloudera-manager-agent
然后就是等待,因为如果是国内服务器,访问 cloudera 的服务可能速度比较慢,如果网速不行这里要等蛮久的 demons 有 1.1GB
建议速度不行可以用 proxychain 提前代理上再进行升级。升级完成后可以看到
[root@ryze- yum.repos.d]# rpm -qa 'cloudera-manager-*'
cloudera-manager-daemons-6.2.-.el7.x86_64
cloudera-manager-server-6.2.-.el7.x86_64
cloudera-manager-agent-6.2.-.el7.x86_64
完成升级启动我们的 agent 服务和 scm 服务
来到此界面,如果没能来到此界面可以参考日志进行一些排错
tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log
tail -f /var/log/cloudera-scm-agent/cloudera-scm-agent.log
tail -f /var/log/messages
4. 帮助其他机器升级 agent:
官方提供了两种方法进行安装。
1. 第一种是在上面展示的界面下面可以直接点一下,然后像之前安装包一样对其他机器进行一键安装。建议使用这个很方便,但是如果你网络不行就只能使用下面的方法2了。
2. 方法二就是按照上面的步骤手动对每一台机器的 agent 版本进行更新,我拿升级一台来做介绍,如果是相同的部署可以写脚本就行批量部署。
登陆目标机器
删除之前的 repo
sudo rm /etc/yum.repos.d/cloudera*manager.repo*
在目录 /etc/yum.repos.d 创建升级文件需要的 /etc/yum.repos.d/cloudera-manager.repo 信息
[cloudera-manager]
# Packages for Cloudera Manager
name=Cloudera Manager
baseurl=https://archive.cloudera.com/cm6/6.2.0/redhat7/yum/
gpgkey=https://archive.cloudera.com/cm6/6.2.0/redhat7/yum/RPM-GPG-KEY-cloudera
gpgcheck=
停止机器上的 agent
sudo systemctl stop cloudera-scm-agent
更新 agent packages
sudo yum clean all
sudo yum repolist
sudo yum upgrade cloudera-manager-daemons cloudera-manager-agent
安装完成
rpm -qa 'cloudera-manager-*'
cloudera-manager-agent-6.2.-..cm...
cloudera-manager-daemons-6.2.-..cm...
重新启动 agent 向 cm 上报信息
sudo systemctl start cloudera-scm-agent
不管采用那种办法,当 agent 全部升级完毕后,使用 Host Inspector 检测所有上报机器情况。
注意在安装包的过程可能出现某些主机失败,放心 cm 会对安装失败的软件包进行回滚,我们可以等到所有都安装停下来之后刷新页面重试失败的即可。注意观察相关的日志,看是否错误是因为一些包冲突引起的,那些错误需要手动排除一下。
升级完成之后
进入 HOME PAGE 应该会看到很多配置上的修改,应该都是新版本 CM 对 DP 上的一些优化,重新部署相关客户端即可。
在完成了 CM 升级之后,未来几天我将会对 CDH 进行升级,到时候会再记录一下,以上。
TroubleShooting:
升级完成之后其中有一台机器的 jn 不知道为何突然信息被清空了。
/dfs/jn/nameservice1/current 下面变成了空白一片,cm 也愉快的报警了这个问题。
重启 jn 查看日志发现相关问题
-- ::, INFO org.apache.hadoop.ipc.Server: IPC Server handler on , call Call# Retry# org.apache.hadoop.hdfs.qjournal.protocol.QJournalProtocol.heartbeat from 10.222.95.179:
java.io.FileNotFoundException: /dfs/jn/nameservice1/current/last-promised-epoch.tmp (No such file or directory)
at java.io.FileOutputStream.open0(Native Method)
at java.io.FileOutputStream.open(FileOutputStream.java:)
at java.io.FileOutputStream.<init>(FileOutputStream.java:)
at java.io.FileOutputStream.<init>(FileOutputStream.java:)
at org.apache.hadoop.hdfs.util.AtomicFileOutputStream.<init>(AtomicFileOutputStream.java:)
at org.apache.hadoop.hdfs.util.PersistentLongFile.writeFile(PersistentLongFile.java:)
at org.apache.hadoop.hdfs.util.PersistentLongFile.set(PersistentLongFile.java:)
at org.apache.hadoop.hdfs.qjournal.server.Journal.updateLastPromisedEpoch(Journal.java:)
at org.apache.hadoop.hdfs.qjournal.server.Journal.checkRequest(Journal.java:)
at org.apache.hadoop.hdfs.qjournal.server.Journal.heartbeat(Journal.java:)
at org.apache.hadoop.hdfs.qjournal.server.JournalNodeRpcServer.heartbeat(JournalNodeRpcServer.java:)
at org.apache.hadoop.hdfs.qjournal.protocolPB.QJournalProtocolServerSideTranslatorPB.heartbeat(QJournalProtocolServerSideTranslatorPB.java:)
at org.apache.hadoop.hdfs.qjournal.protocol.QJournalProtocolProtos$QJournalProtocolService$.callBlockingMethod(QJournalProtocolProtos.java:)
at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:)
at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:)
at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:)
at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:)
at org.apache.hadoop.ipc.Server$Handler.run(Server.java:)
-- ::, ERROR org.apache.hadoop.hdfs.qjournal.server.JournalNode: RECEIVED SIGNAL : SIGTERM
-- ::, INFO org.apache.hadoop.hdfs.qjournal.server.JournalNode: SHUTDOWN_MSG
被清空之后无法找到相关文件报出了错误,我 google 了一下相关资料并且发现 namenode 往下下发频率不高
1. action 关闭有问题的 jn 节点。
2. 拷贝正常节点上的日志到该 jn 上。
3. 重启该 jn 让 jn 跟上其他机器。
解决这个问题,但是感觉时有 3台 jn 的时候 挂一台不会对 namenode 产生影响,但是挂两台就会,不知道直接移除该 jn 然后再将其加回来是否能不用通过拷贝的类似命令解决该问题。
Reference:
https://www.cloudera.com/documentation/enterprise/upgrade/topics/ug_cm_upgrade_before.html#cm_upgrade_before
https://www.cloudera.com/documentation/enterprise/upgrade/topics/ug_cdh_upgrade.html
https://cloud.tencent.com/developer/article/1077573 如何升级Cloudera Manager和CDH
CDH CM版本 6.0.1 升级到 CM 6.2.0 当前最新版本(CentOS 7.x)的更多相关文章
- CDH 版本 6.0.1 升级到 6.2.0 当前最新版本(CentOS 7.x)
前文「CDH CM版本 6.0.1 升级到 CM 6.2.0 当前最新版本(CentOS 7.x)」 承接上文,当我们完成 CM 6.2.0 的升级之后,我们已经相当于完成了80% minor 的升级 ...
- collection包1.1.0都升级了什么功能
collection包1.1.0都升级了什么功能 jianfengye/collection(https://github.com/jianfengye/collection) 这个包喜迎第一个子版本 ...
- Linux下Oracle 10.2.0.1升级到10.2.0.4总结
最近部署测试环境时,将测试环境ORACLE数据库从10.2.0.1升级到了10.2.0.4,顺便整理记录一下升级过程. 实验环境: 操作系统:Oracle Linux Server release 5 ...
- 获取APP最新版本的接口案例
思路: 开发初期.安卓的应用可能没有上传到应用市场,可以把应用apk放到服务器上,供用户下载.把对应用的版本信息整理成为一个XML文件,放到服务器上,通过接口读取xml文件,获取有版本信息,然后安卓端 ...
- 将正在运行的Proxmox EV5.x版本更新到最新版本
问题描述: 最近搭建了一个KVM开源虚拟化平台 Proxmox Virtual Environment是一种基于QEMU / KVM和LXC的开源服务器虚拟化管理解决方案.您可以使用集成的,易于使用的 ...
- 安装node的最新版本
前段时间小试了一下node 这段时间就差不多忘了 恩 然后现在自己想去回顾一下,然后流程想再好好弄一遍 争取掌握node 因为我现在已经安装了 一个node版本 那我想安装最新版本吧 首先,看看你的n ...
- Python3第三方组件最新版本追踪实现
一.说明 在安全基线中有一项要求就是注意软件版本是否是最新版本,检查是否是最新版本有两方面的工作一是查看当前使用的软件版本二是当前使用软件的最新版本.在之前的“安全基线自动化扫描.生成报告.加固的实现 ...
- TortoiseSVN 覆盖SVN仓库最新版本提交
情况背景: ibank.pdm文件最新版本有问题,版本号为5051. 我想在5050的版本上修改后提交,覆盖5051版本的修改,也就是经过我修改后的5050版本,覆盖5051版本的修改,提交成功并成为 ...
- VisualStudio下如何编译和使用最新版本的OpenCV(修正版)
OpenCV是托管于GitHub的开源项目,本文具体解决一个问题,就是“获取最新版本的OpenCV,并且在自己的项目中使用起来" 最新版本 2017年3月31日 BY:jsxyhelu ...
随机推荐
- 2019 用友网络java面试笔试题 (含面试题解析)
本人3年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条. 用友网络等公司offer,岗位是Java后端开发,最终选择去了 用友网络. 面试了很多家公司,感觉大部分公司考察 ...
- Python的virtualenv管理
原文链接 虚拟环境 Python 开发中所谓的虚拟环境,就是为 Python 版本及第三方库创建独立的开发环境,使不同项目之间互不干扰.借助于虚拟环境,我们可以在同一台电脑上构建出项目 A 在基于 P ...
- LocalDateTime&LocalDate&LocalTime
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");LocalDateTime ti ...
- pandas-10 pd.pivot_table()透视表功能
pandas-10 pd.pivot_table()透视表功能 和excel一样,pandas也有一个透视表的功能,具体demo如下: import numpy as np import pandas ...
- 深入理解es6(下)
一.symbol javascript基本数据类型: null.undefined.number.boolean.string.symbol ES6 引入了一种新的原始数据类型Symbol,表示独一无 ...
- region、xld有对应的字符串时,将region、xld按照行或列排序的算法实现
用Halcon解码时,如果一张图里面有多个码,它通常可以把这些码都解出来,并且生成对应的解码结果字符串元组(也就是下面的DecodedDataStrings),如果有多个码,那么该元组就有多个元素. ...
- Implement CGLIB in ABAP
What is cglib?A Byte Code Generation Library which is high level API to generate and transform Java ...
- easyui datagrid treegrid 取消行选中、取消高亮
.datagrid-row-selected{ background: #FFFFFF !important; color: #404040; } 一.思路来源:https://www.cnblogs ...
- 异常详细信息: System.MissingMethodException: 无法创建抽象类。
asp.net mvc 在使用post向后端传送json数据时报异常,在路由配置中添加如下即可 public static void RegisterRoutes(RouteCollection ro ...
- GNS3、Wireshark、SecureCRT 环境部署
本次GNS3环境部署教程基于官方推荐的稳定版1.5.4.初次接触此软件,详细的使用方法不是很清楚,所以以此作为学习记录,仅供参考,后期补充. 软件介绍 GNS3 GNS3是一款具有图形化界面可以运行在 ...