TT Bigdata TT Bigdata
首页
  • 部署专题

    • 常规安装
    • 一键部署
  • 组件安装

    • 常规&高可用
  • 版本专题

    • 更新说明
  • Ambari-Env

    • 环境准备
    • 开始使用
  • 组件编译

    • 专区—Ambari
    • 专区—Bigtop-官方组件
    • 专区—Bigtop-扩展组件
  • 报错解决

    • 专区—Ambari
    • 专区—Bigtop
  • 其他技巧

    • Maven镜像加速
    • Gradle镜像加速
    • Bower镜像加速
    • 虚拟环境思路
    • R环境安装+一键安装脚本
    • Ivy配置私有镜像仓库
    • Node.js 多版本共存方案
    • Ambari Web本地启动
    • Npm镜像加速
    • PostgreSQL快速安装
    • Temurin JDK 23快速安装
  • 成神之路

    • 专区—Ambari
    • 专区—Bigtop
  • 集成案例

    • Redis集成教学
    • Dolphin集成教学
    • Doris集成教学
    • 持续整理...
  • 核心代码

    • 各组件代码
    • 通用代码模板
  • 国产化&其他系统

    • Rocky系列
    • Ubuntu系列
  • 生产调优

    • 组件调优指南
    • 1v1指导调优
  • 支持&共建

    • 蓝图愿景
    • 技术支持
    • 合作共建
登陆
GitHub (opens new window)

JaneTTR

数据酿造智慧,每一滴都是沉淀!
首页
  • 部署专题

    • 常规安装
    • 一键部署
  • 组件安装

    • 常规&高可用
  • 版本专题

    • 更新说明
  • Ambari-Env

    • 环境准备
    • 开始使用
  • 组件编译

    • 专区—Ambari
    • 专区—Bigtop-官方组件
    • 专区—Bigtop-扩展组件
  • 报错解决

    • 专区—Ambari
    • 专区—Bigtop
  • 其他技巧

    • Maven镜像加速
    • Gradle镜像加速
    • Bower镜像加速
    • 虚拟环境思路
    • R环境安装+一键安装脚本
    • Ivy配置私有镜像仓库
    • Node.js 多版本共存方案
    • Ambari Web本地启动
    • Npm镜像加速
    • PostgreSQL快速安装
    • Temurin JDK 23快速安装
  • 成神之路

    • 专区—Ambari
    • 专区—Bigtop
  • 集成案例

    • Redis集成教学
    • Dolphin集成教学
    • Doris集成教学
    • 持续整理...
  • 核心代码

    • 各组件代码
    • 通用代码模板
  • 国产化&其他系统

    • Rocky系列
    • Ubuntu系列
  • 生产调优

    • 组件调优指南
    • 1v1指导调优
  • 支持&共建

    • 蓝图愿景
    • 技术支持
    • 合作共建
登陆
GitHub (opens new window)
  • Ambari快速部署

    • 适用于2.8.0-el7
    • 适用于2.8.0-el7
    • 适用于3.0.0-el7
    • 适用于3.0.0-el8
    • 适用于3.0.0-el8
    • 适用于3.0.0-ubuntu22
    • 适用于3.0.0-ubuntu22
      • 支持范围
      • 卸载脚本完整内容
      • hosts.txt 格式说明
      • 使用方法
      • 图示参考
  • JDK环境

  • MAVEN环境

  • GRADLE环境

  • CONDA环境

  • R环境

  • 一键部署
  • Ambari快速部署
JaneTTR
2025-07-01
目录

适用于3.0.0-ubuntu22一键卸载

场景说明

本指南专为 Ubuntu 22.04 环境设计,支持一键安全批量卸载 Ambari/Bigtop 及其依赖。适合环境重置、集群重装或测试回收。脚本支持多节点并发操作,确保卸载后系统无历史残留。

# 支持范围

类别 说明
操作系统 Ubuntu 22.04(Jammy),兼容 x86_64 架构
卸载内容 Ambari Server/Agent、MariaDB/MySQL、JDK、MySQL Connector、Nginx、本地 APT 源、常见组件残留
适用场景 建议结合本站 ONEKEY 安装方案,配合原始 hosts.txt,支持多节点集群卸载、环境回滚与测试验证

# 卸载脚本完整内容 必读

注意

下方为 Ubuntu 22 专用一键卸载脚本,复制前请确保 hosts.txt 配置无误。脚本支持并发批量执行,适配 APT 公钥、sudo 场景,务必阅读用法说明。

#!/bin/bash
# 版权所有 (c) JaneTTR 2025
# 项目名称:ambari-env
#
# 本文件属于付费部分代码,仅供个人学习和研究使用。
#
# 禁止行为:
#   1. 未经授权,不得将本文件或其编译后的代码用于任何商业用途;
#   2. 禁止重新分发本文件或其修改版本;
#   3. 禁止通过反编译、反向工程等手段试图绕过授权验证。
#
# 商业授权:
#   如需将本文件或其编译后的代码用于商业用途,必须获得版权所有者的书面授权。
# 联系方式:
#   邮箱:3832514048@qq.com
#
# 责任声明:
#   本文件按“现状”提供,不附带任何形式的担保,包括但不限于适销性、
#   特定用途适用性或无侵权的担保。
#
# 如有任何疑问,请联系版权所有者。

# —————— 强制 UTF-8 区域 ——————
export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
sudo locale-gen zh_CN.UTF-8
sudo locale-gen en_US.UTF-8
sudo update-locale LANG=zh_CN.UTF-8 LC_ALL=zh_CN.UTF-8

set -e
LOGFILE="/tmp/ambari_cleanup.log"
exec > >(tee -a "$LOGFILE") 2>&1

#----------------------------------
# 通用日志函数
#----------------------------------
log_info ()  { echo "$(date '+%F %T') [Info]  $*"; }
log_error () { echo "$(date '+%F %T') [Error] $*" >&2; }

#----------------------------------
# APT 锁处理:杀掉占锁进程并等待锁释放
#----------------------------------
kill_apt_locks() {
  local locks=(
    /var/lib/dpkg/lock-frontend
    /var/lib/dpkg/lock
    /var/lib/apt/lists/lock
    /var/cache/apt/archives/lock
  )
  for lock in "${locks[@]}"; do
    if sudo fuser "$lock" >/dev/null 2>&1; then
      log_info "[$TARGET] 杀掉占用锁 $lock 的进程..."
      sudo fuser -k "$lock" || true
    fi
  done
}
wait_for_apt() {
  kill_apt_locks
  while sudo fuser /var/lib/dpkg/lock-frontend >/dev/null 2>&1; do
    log_info "[$TARGET] 等待 APT 锁释放…"
    sleep 1
  done
}

#----------------------------------
# 安装 sshpass(本机)
#----------------------------------
check_install_sshpass() {
  if ! command -v sshpass &>/dev/null; then
    log_info "sshpass 未安装,开始安装…"
    sudo apt update && sudo apt install -y sshpass
  fi
}

#----------------------------------
# 停止服务 & 卸包
#----------------------------------
do_stop_services() {
  log_info "[$TARGET] 停止服务…"
  # 杀掉 jps 检测到的 Java 进程(排除Jps本身)
  if command -v jps &>/dev/null; then
    mapfile -t pids < <(jps | awk '$2 != "Jps" && $3 != "information" {print $1}')
    for pid in "${pids[@]}"; do
      if [[ "$pid" =~ ^[0-9]+$ ]] && kill -0 "$pid" 2>/dev/null; then
        kill -9 "$pid"
      fi
    done
  fi

  # 按关键词杀进程
  for kw in java n9e nightingale categraf; do
    pids=$(ps -ef | grep "$kw" | grep -v grep | awk '{print $2}')
    for pid in $pids; do
      if kill -0 "$pid" 2>/dev/null; then
        log_info "按关键词[$kw]检测到进程: $pid"
        kill -9 "$pid"
      fi
    done
  done

  log_info "[$TARGET] 卸载 Ambari/Bigtop 相关包…"
  if command -v apt-get &>/dev/null; then
    wait_for_apt
    dpkg -l | grep -E 'ambari|bigtop' | awk '{print $2}' | xargs -r sudo apt-get remove --purge -y
    wait_for_apt
    sudo apt-get autoremove -y
  fi
}


#----------------------------------
# 清理文件/用户/DB/locale
#----------------------------------
do_cleanup() {
  log_info "[$TARGET] 清理残留文件…"
  local dirs=(/opt /usr /etc /var /home /data*)
  local regex='.*(ambari-qa|ams|hbase|hcat|hdfs|hive|kafka|kms|mapred|ranger|solr|sqoop|tez|yarn|dolphin|zookeeper|doris|nightingale|categraf|spark|flink|zeppelin|phoenix|ozone|celeborn|cloudbeaver).*'
  for d in "${dirs[@]}"; do
    [ -d "$d" ] && sudo find "$d" -regextype posix-extended -regex "$regex" \
      -not -path "/data/modules" -not -path "/data/modules/*" \
      -exec rm -rf {} + 2>/dev/null
  done

  log_info "[$TARGET] 清理 ambari*/bigtop* 临时目录…"
  for d in /tmp /var /run /sys/fs /etc /usr; do
    [ -d "$d" ] && sudo find "$d" -name "ambari*" \
      -not -path "/data/modules" -not -path "/data/modules/*" \
      -exec rm -rf {} + 2>/dev/null
  done
  for d in /var /usr; do
    [ -d "$d" ] && sudo find "$d" -name "bigtop*" \
      -not -path "/data/modules" -not -path "/data/modules/*" \
      -exec rm -rf {} + 2>/dev/null
  done
  sudo rm -rf /usr/bigtop

  log_info "[$TARGET] 清理用户/用户组/家目录…"
  local users=(ambari-qa ams hbase hcat hdfs hive kafka kms mapred ranger solr sqoop tez yarn zookeeper zeppelin flink spark hadoop doris nightingale categraf ozone celebon)
  for u in "${users[@]}"; do
    sudo userdel -r "$u" 2>/dev/null || true
    sudo groupdel "$u"   2>/dev/null || true
    sudo rm -rf /home/"$u" 2>/dev/null || true
  done

  log_info "[$TARGET] 清理 Kafka & Hadoop 数据目录…"
  sudo rm -rf /kafka-logs/meta.properties /hadoop/* /data1/* /data2/* /ozone /celeborn /data/kafka-logs /data/hadoop 2>/dev/null || true

  log_info "[$TARGET] 清理并重建数据库…"
  local svc initcmd
  if systemctl list-units --type=service | grep -q mariadb; then
    svc="mariadb"; initcmd="mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql"
  elif systemctl list-units --type=service | grep -q mysql; then
    svc="mysql"; initcmd="mysqld --initialize-insecure --user=mysql --datadir=/var/lib/mysql"
  fi
  if [ -n "${svc-}" ]; then
    sudo systemctl stop "$svc" || log_error "停止 $svc 失败"
    sudo timeout 5 rm -rf /var/lib/mysql/* || log_error "清理数据失败"
    sudo timeout 5 $initcmd       || log_error "初始化失败"
    sudo timeout 15 systemctl restart "$svc" || log_error "重启失败"
    sudo timeout 15 systemctl enable "$svc"  || log_error "设置开机自启失败"
  fi

  log_info "[$TARGET] 清理 Hadoop 日志…"
  sudo find /var/log -type d -group hadoop -exec sudo rm -rf {} + 2>/dev/null || true

  log_info "[$TARGET] 重新生成 locale…"
  sudo locale-gen zh_CN.UTF-8
  sudo locale-gen en_US.UTF-8
  sudo update-locale
}

#----------------------------------
# SSH 远端执行
#----------------------------------
run_remote() {
  local user=$1 ip=$2 pass=$3
  sshpass -p "$pass" ssh -o StrictHostKeyChecking=no \
                         -o UserKnownHostsFile=/dev/null \
                         -o ConnectTimeout=5 \
                         "$user@$ip" "TARGET=$ip bash -s remote" < "$0"
}

#----------------------------------
# 本地主流程
#----------------------------------
main() {
  check_install_sshpass
  mapfile -t local_ips < <(hostname -I | tr ' ' '\n')
  local_ips+=(127.0.0.1)

  [ -f "./hosts.txt" ] || { log_error "hosts.txt 不存在"; exit 1; }
  while IFS= read -r line || [ -n "$line" ]; do
    [[ -z "$line" || "$line" =~ ^# ]] && continue
    read -r user pass ip <<< "$(echo "$line" | tr -d '\r' | xargs)"
    TARGET="$ip"
    log_info "=== 开始处理 $TARGET ==="

    if printf '%s\n' "${local_ips[@]}" | grep -Fxq "$ip"; then
      do_stop_services; do_cleanup
    else
      run_remote "$user" "$ip" "$pass"
    fi

    log_info "=== $TARGET 处理完毕 ==="
  done < "./hosts.txt"

  #----------------------------------
  # 本机公钥修复
  #----------------------------------
  log_info "修复本机 APT 公钥(如有)…"
  for key in $(sudo apt update 2>&1 | awk '/NO_PUBKEY/ {print $NF}' | sort -u); do
    log_info "导入本机公钥 $key"
    sudo gpg --keyserver keyserver.ubuntu.com --recv-keys "$key"
    sudo gpg --export "$key" \
      | sudo tee /etc/apt/trusted.gpg.d/ubuntu_"$key".gpg >/dev/null
  done

  log_info "所有节点清理完成,详见 $LOGFILE"
}

#----------------------------------
# 远端流程
#----------------------------------
remote_main() {
  do_stop_services
  do_cleanup

  log_info "[$TARGET] 远端修复 APT 公钥(如有)…"
  for key in $(apt update 2>&1 | awk '/NO_PUBKEY/ {print $NF}' | sort -u); do
    log_info "[$TARGET] 导入远端公钥 $key"
    sudo gpg --keyserver keyserver.ubuntu.com --recv-keys "$key"
    sudo gpg --export "$key" \
      | sudo tee /etc/apt/trusted.gpg.d/ubuntu_"$key".gpg >/dev/null
  done
  sudo apt update
}

# 脚本入口
if [[ "${1-}" == "remote" ]]; then
  remote_main; exit 0
else
  main; exit 0
fi

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244

# hosts.txt 格式说明

用户名 密码 IP地址
root xxxxxx 192.168.3.1
root xxxxxx 192.168.3.2
root xxxxxx 192.168.3.3

笔记

请确保所有节点 Ubuntu 22.04 网络互通、拥有 sudo/root 权限。hosts.txt 可直接复用一键安装方案的文件。

# 使用方法

  1. 准备 hosts.txt 填写所有目标主机账号、密码、IP,并放置于脚本同目录。

  2. 执行卸载脚本

    chmod +x uninstall_ambari_cluster.sh
    ./uninstall_ambari_cluster.sh
    
    1
    2

    日志自动写入 ambari_cleanup.log,如有失败节点可查阅该文件定位。

  3. 检查结果 卸载结束后,建议逐台检查以下目录确保无残留:

    • /var/lib/ambari-*
    • /usr/jdk64/
    • /var/lib/mysql/
    • /etc/ambari*

    如有业务数据目录(如 /data1 /data2 等),可根据实际需求删减或扩展清理范围,避免误删。

# 图示参考

image-20250718155117462

image-20250718155206773

提示

如遇系统无法删除某些文件、APT 锁定、远程失败等,可根据脚本日志内容分步手动执行排查。该脚本专为 Ubuntu 22.04 环境适配,Rocky8、CentOS 等发行版请使用对应专版卸载方案。

#ONEKEY#Ambari#Bigtop#自动化部署#集群卸载
适用于3.0.0-ubuntu22
安装JDK1.8

← 适用于3.0.0-ubuntu22 安装JDK1.8→

最近更新
01
bigtop-select 打包缺 compat 报错修复 deb
07-16
02
bigtop-select 打包缺 control 文件报错修复 deb
07-16
03
首次编译-环境初始化 必装
07-16
更多文章>
Theme by Vdoing | Copyright © 2017-2025 JaneTTR | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式