0008-如何卸载CDH(附一键卸载github源码)
Fayson的github: https://github.com/fayson/cdhproject
推荐关注微信公众号:“Hadoop实操”,ID:gh_c4c535955d0f,或者扫描文末二维码。
1 前置条件
本文档将介绍Cloudera Manager与CDH的卸载,并基于CDH使用parcels安装且未配置安全(AD/LDAP, Kerberos, Data Encryption)的集群,以下是本次测试环境,但不是本操作手册的硬限制:
1.操作系统版本:CENTOS6.5
2.MySQL数据库版本为5.1.73
3.CM版本:CM 5.11
4.CDH版本:CDH 5.11
5.采用root或有sudo权限用户对集群进行卸载
2 用户数据备份
2.1 备份HDFS数据
- hdfs数据备份
使用distcp进行集群之间数据复制进行hdfs数据备份,备份操作如下:
hadoop distcp hftp://namenodeA:port/xxx/ hdfs://namenodeB/xxx
注:此命令需运行在目标集群中执行,确保目标集群空间足够,以上数据目录根据自己集群的真实环境做相应的修改;
namenodeA:源集群namenode节点ip地址
port:源集群端口,默认50070
namenodeB:目标集群namenode节点ip地址
xxx:对应hdfs的数据目录
- namenode节点元数据备份
登录namenode服务器上,进行如下操作:
#进入safemode模式
[root@ip-172-31-3-217 ~]# sudo -u hdfs hadoop dfsadmin -safemode ente
DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.
Safe mode is ON
#将所有edits修改flush到fsimage
[root@ip-172-31-3-217 ~]# sudo -u hdfs hadoop dfsadmin –saveNamespace
DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.
Save namespace successful
将namenode元数据备份,根据自己集群namenode目录进行如下操作:
[root@ip-172-31-3-217 ~]# mkdir namenode_back
[root@ip-172-31-3-217 ~]# cd namenode_back/
[root@ip-172-31-3-217 ~]# cd /dfs/nn/
#将nn目录下所有文件压缩至/root/namenode_back/nn_back.tar.gz目录下
[root@ip-172-31-3-217 nn]# tar -czvf /root/namenode_back/nn_back.tar.gz .
./
./current/
./current/fsimage
./current/fstime
./current/VERSION
./current/edits
./image/
./image/fsimage
2.2 备份MySQL元数据
- 在Mysql安装的服务器上,执行如下操作,备份hive元数据信息
[root@ip-172-31-3-217 ~]# mkdir mysql_back
[root@ip-172-31-3-217 ~]# cd mysql_back
#-u后面是mysql用户名,-p单引号中是用户对应的密码,metastore为库名,metastore.sql为备份输出文件
[root@ip-172-31-3-217 mysql_back]# mysqldump -uroot -p'mysql' metastore > metastore.sql
[root@ip-172-31-3-217 mysql_back]# mysqldump -uroot -p'mysql' cm > cm.sql
[root@ip-172-31-3-217 mysql_back]# mysqldump -uroot -p'mysql' am > am.sql
[root@ip-172-31-3-217 mysql_back]# mysqldump -uroot -p'mysql' rm > rm.sql
#执行完成后,产生如下sql文件
[root@ip-172-31-3-217 mysql_back]# ll
total 36452
-rw-r--r-- 1 root root 2074077 May 30 02:39 am.sql
-rw-r--r-- 1 root root 35182945 May 30 02:39 cm.sql
-rw-r--r-- 1 root root 54030 May 30 02:36 metastore.sql
-rw-r--r-- 1 root root 7542 May 30 02:39 rm.sql
注:如果有hue,sentry,Navigator数据库可以同样备份
2.3 备份CDH集群配置数据
通过Cloudera Manager提供的API接口,导出一份JSON文档,该文档包含Cloudera 管理器实例的配置数据,可以通过这份JSON文档备份或恢复Cloudera管理器的部署。
- 备份集群配置数据
1.登录到Cloudera Manager所在服务器
2.运行如下命令:
[root@ip-172-31-3-217 ~]# curl -u admin_username:admin_pass "http://cm_server_host:7180/api/v16/cm/deployment" > path_to_file/cm-deployment.json
admin_username: 登录到ClouderaManager的用户名
admin_pass: 对应admin_username用户的密码
cm_server_host: 是ClouderaManager服务器的主机名
path_to_file: 保存配置文件的路径
将上述提到的四个参数修改当前集群对应的信息即可
导出截图:


- 恢复集群配置数据
注意:此功能只有Cloudera许可证才可以使用
1.首先进入Cloudera Manager管理平台,进入如下操作


注意:如果在进行API调用操作之前未停止集群,那么API调用将在运行作业之前停止所有集群服务,任何运行的作业和数据都会丢失。
2.登录到Cloudera Manager所在的服务器
3.执行如下命令
curl --upload-file path_to_file/cm-deployment.json -u admin_uname:admin_pass http://cm_server_host:7180/api/v16/cm/deployment?deleteCurrentDeployment=true
admin_uname: 登录到ClouderaManager的用户名
admin_pass: 对应admin_uname用户的密码
cm_server_host: 是ClouderaManager服务器的主机名
path_to_file:JSON配置文件的路径
2.4 Zookeeper数据目录备份
- 备份所有Zookeeper服务器的数据目录,以172.31.3.217为例操作如下:
[root@ip-172-31-3-217 ~]# mkdir zookeeper_back
[root@ip-172-31-3-217 ~]# scp -r /var/lib/zookeeper/ /root/zookeeper_back/zookeeper_1
2.5 备份用户数据目录
以下路径为Cloudera默认安装目录下个组件用户数据:
/var/lib/flume-ng
/var/lib/hadoop*
/var/lib/hue
/var/lib/navigator
/var/lib/oozie
/var/lib/solr
/var/lib/sqoop*
/var/lib/zookeeper #同步数据
#data_driver_path为集群环境部署时设置的目录,根据自己环境进行调整
data_drive_path/dfs
data_drive_path/mapred
data_drive_path/yarn
如需备份相关组件数据,可参考2.4进行数据备份。
3.停止所有服务
3.1打开Cloudera Manager控制台

3.2 关闭集群
停止CDH集群,如下图所示操作

点击确认操作,如下图所示

等待所有服务器停止操作成功,如下图所示

3.3 关闭Cloudera Management Service
停止Cloudera Manager Service,如下图所示

点击确认对话框,如下图所示

等待服务停止成功,如下图所示

4 解除并移除Parcels
在Cloudera Manager管理界面,进行如下操作

点击上图标识功能,进入如下界面

点击上图标识,选择【仅限停用状态】,点击【确定】

停用后,状态变为“激活”,如下图所示

点击“激活”旁菜单,选择“从主机删除”,如下图所示

点击确认,如下图所示

删除成功后显示如下

5 删除集群
点击Clouder Manager进入主页,如下图所示

删除集群,如下操作

点击“删除”操作,如下图所示

删除成功后显示如下

6 卸载Cloudera Manager Server
6.1 停止Cloudera Manager Server和数据库
在集群master服务器上执行如下命令
[root@ip-172-31-3-217 ~]# service cloudera-scm-server stop
#如果使用内置db postgresql需要停止该服务,没有则忽略
[root@ip-172-31-3-217 ~]# service cloudera-scm-server-db stop
6.2 卸载Cloudera Manager Server和数据库
使用yum卸载cloudera-scm-server和cloudera-scm-server-db-2,命令如下
[root@ip-172-31-3-217 ~]# yum remove cloudera-manager-server
#如果使用内置db postgresql需要移除该服务,没有则忽略
[root@ip-172-31-3-217 ~]# yum remove cloudera-manager-server-db-2
7 卸载Cloudera Manager Agent和Managed Software
在集群所有的机器上进行如下操作,卸载Cloudera Manager Agent 和Managed Software。
7.1 停止Cloudera Manager Agent
在所有服务器上使用如下命令停止Cloudera Manager Agent 服务
[root@ip-172-31-3-217 ~]# sudo service cloudera-scm-agent hard_stop
7.2 卸载软件
在集群所有节点执行如下操作:
[root@ip-172-31-3-217 ~]# yum remove 'cloudera-manager-*' avro-tools crunch flume-ng hadoop-hdfs-fuse hadoop-hdfs-nfs3 hadoop-httpfs hadoop-kms hbase-solr hive-hbase hive-webhcat hue-beeswax hue-hbase hue-impala hue-pig hue-plugins hue-rdbms hue-search hue-spark hue-sqoop hue-zookeeper impala impala-shell kite llama mahout oozie pig pig-udf-datafu search sentry solr-mapreduce spark-core spark-master spark-worker spark-history-server spark-python sqoop sqoop2 whirr hue-common oozie-client solr solr-doc sqoop2-client zookeeper
7.3 运行清除命令
在集群所有节点执行如下操作:
[root@ip-172-31-3-217 ~]# yum clean all
8 移除Cloudera Manager和用户数据
8.1 杀死 Cloudera Manager和Managed进程
在集群所有节点执行如下操作,将所有服务器的Cloudera Manager和Managed进程杀死,命令如下:
for u in cloudera-scm flume hadoop hdfs hbase hive httpfs hue impala llama mapred oozie solr spark sqoop sqoop2 yarn zookeeper;
do
sudo kill $(ps -u $u -o pid=);
done
8.2 移除Cloudera Manager数据
在集群所有节点执行如下命令,删除所有Cloudera Manager数据
umount cm_processes
rm –rf /usr/share/cmf /var/lib/cloudera* /var/cache/yum/x86_64/6/cloudera* /var/log/cloudera* /var/run/cloudera* /etc/cloudera* /usr/lib64/cmf
8.3 移除Cloudera Manager Lock File
在集群中所有节点执行如下命令,删除Cloudera Manager Lock File
rm –rf /tmp/.scm_prepare_node.lock
8.4 移除用户数据
此步骤将永久删除所有用户数据。为了备份数据,在启动卸载过程之前,使用distcp命令将其复制到另一个集群中。在集群中所有节点执行如下命令,删除用户所有数据:
#用户数据目录
rm -rf /var/lib/flume-ng /var/lib/hadoop* /var/lib/hue /var/lib/navigator /var/lib/oozie /var/lib/solr /var/lib/sqoop* /var/lib/zookeeper
rm -rf /usr/lib/hadoop /usr/lib/hadoop* /usr/lib/hive /usr/lib/hbase /usr/lib/oozie /usr/lib/sqoop* /usr/lib/zookeeper /usr/lib/bigtop* /usr/lib/flume-ng /usr/lib/hcatalog
rm -rf /var/run/hadoop* /var/run/flume-ng /var/run/cloudera* /var/run/oozie /var/run/sqoop2 /var/run/zookeeper /var/run/hbase /var/run/hbase /var/run/impala /var/run/hive /var/run/hdfs-sockets
#服务命令
rm -rf /usr/bin/hadoop* /usr/bin/zookeeper* /usr/bin/hbase* /usr/bin/hive* /usr/bin/hdfs /usr/bin/mapred /usr/bin/yarn /usr/bin/sqoop* /usr/bin/oozie
#集群配置文件目录
rm -rf /etc/cloudera* /etc/hadoop* /etc/zookeeper* /etc/hive* /etc/hue /etc/impala /etc/sqoop* /etc/oozie /etc/hbase* /etc/hcatalog
#集群配置文件目录
rm -rf /etc/alternatives/avro-tools /etc/alternatives/beeline /etc/alternatives/catalogd /etc/alternatives/cli_* /etc/alternatives/flume* /etc/alternatives/hadoop* /etc/alternatives/hbase* /etc/alternatives/hcat /etc/alternatives/hdfs /etc/alternatives/hive* /etc/alternatives/hue* /etc/alternatives/impala* /etc/alternatives/llama* /etc/alternatives/load_gen /etc/alternatives/mahout* /etc/alternatives/mapred /etc/alternatives/oozie* /etc/alternatives/pig* /etc/alternatives/pyspark /etc/alternatives/sentry* /etc/alternatives/solr* /etc/alternatives/spark* /etc/alternatives/sqoop* /etc/alternatives/statestored /etc/alternatives/whirr /etc/alternatives/yarn /etc/alternatives/zookeeper*
#
rm -rf /var/lib/alternatives/avro-tools /var/lib/alternatives/beeline /var/lib/alternatives/catalogd /var/lib/alternatives/cli_* /var/lib/alternatives/flume* /var/lib/alternatives/hadoop* /var/lib/alternatives/hbase* /var/lib/alternatives/hcat /var/lib/alternatives/hdfs /var/lib/alternatives/hive* /var/lib/alternatives/hue* /var/lib/alternatives/impala* /var/lib/alternatives/llama* /var/lib/alternatives/load_gen /var/lib/alternatives/mahout* /var/lib/alternatives/mapred /var/lib/alternatives/oozie* /var/lib/alternatives/pig* /var/lib/alternatives/pyspark /var/lib/alternatives/sentry* /var/lib/alternatives/solr* /var/lib/alternatives/spark* /var/lib/alternatives/sqoop* /var/lib/alternatives/statestored /var/lib/alternatives/whirr /var/lib/alternatives/yarn /var/lib/alternatives/zookeeper*
#请修改 data_drive_path 为自己机器上的路径
rm -rf data_drive_path/dfs data_drive_path/mapred data_drive_path/yarn
#删除Hadoop相关服务安装目录、服务软件包数据,数据格式为parcels、服务软件包缓存数据
rm -rf /opt/cloudera/
8.5 停止并移除外部数据库
在安装mysql的服务器上进行操作。
- 停止mysql数据库,操作如下:
service mysqld stop
- 卸载mysql数据库,操作如下
yum remove mysql*
- 删除mysql数据目录,操作如下
rm –rf /var/lib/mysql
9.一键卸载脚本说明(GitHub地址)
- 卸载脚本说明:

autouninstall.sh:自动卸载脚本
components.list:集群所有安装的组件列表
delete.list:需要删除的目录列表,列表中已配置大部分CDH安装默认目录,用户需要对列表末尾的hdfs目录根据自己集群环境进行目录进行相应调整,如下图所示:

node.list:集群所有节点,根据集群环境进行节点配置
user.list:集群所有组件安装时所使用的用户名
- 脚本使用
[root@ip-172-31-3-217 shell]# ./autouninstall.sh
params is can not be null.
nodelist 1: 集群所有节点hostname文件
componentlist 2: 卸载执行指令
userlist 3: 集群中组件用户名
deletelist 4: 删除的目录列表
username 5: 登录集群用户名
longinType 6: 登录类型:key密钥文件,password密码登录,free免密认证
password 7: 登录集群的认证文件或者密码,如果为密钥文件则确保文件权限为600
[root@ip-172-31-3-217 shell]# ./autouninstall.sh node.list components.list user.list delete.list root key key.pem
注:脚本是在第五步操作完成后,在namenode节点进行一键卸载
运行截图


源码地址:
https://github.com/javaxsky/cdh-shell
为天地立心,为生民立命,为往圣继绝学,为万世开太平。
推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。
![]()
原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操