Cloudera Manager UI 에서 클러스터와 ECS 를 삭제한 뒤 같은 서버에 재설치하려면 호스트에 남은 서비스 계정, /var/lib 데이터, PostgreSQL 의 서비스 DB 내용을 정리해야 한다. DB 와 role 은 남기고 테이블만 비우면 설치 마법사가 그대로 재사용한다. alternatives 잔재 정리는 CDP 재설치 시 alternatives·고아 UID 잔재 정리에 있다.
ACCOUNTS=(cloudera-scm hdfs httpfs sqoop hive kafka yarn omid hbase streamsrepmgr streamsmsgmgr livy kms atlas schemaregistry hue zookeeper accumulo phoenix mapred druid ranger zeppelin oozie kudu knox solr impala flume spark cruisecontrol)
for u in "${ACCOUNTS[@]}"; do # 1. 잔여 프로세스 종료
id "$u" &>/dev/null && pgrep -u "$u" >/dev/null && { pkill -9 -u "$u"; sleep 1; }
done
for u in "${ACCOUNTS[@]}"; do # 2. 유저 삭제
id "$u" &>/dev/null && { userdel -rf "$u"; echo "$u exit=$?"; }
done
for i in 1 2 3; do # 3. primary group 순서 문제 때문에 그룹 삭제를 반복
for g in "${ACCOUNTS[@]}"; do getent group "$g" &>/dev/null && groupdel "$g"; done
done
for u in "${ACCOUNTS[@]}"; do # 4. 확인
id "$u" &>/dev/null && echo "남은 유저: $u"; getent group "$u" &>/dev/null && echo "남은 그룹: $u"
done
userdel: user ... is currently used by process 는 프로세스가 살아 있는 것, currently logged in 은 그 계정의 SSH 세션이 열려 있는 것이다(who 로 확인). 실제 계정 목록은 cat /etc/passwd 에서 UID 900 대 Cloudera 계정을 보고 맞춘다.
/var/lib 아래 cloudera-scm-agent, cloudera-scm-eventserver, cloudera-host-monitor, cloudera-service-monitor, cloudera-scm-headlamp, hadoop-ozone, hue 등 Cloudera 서비스 디렉터리와 /var/log/cloudera-*, /opt/cloudera 를 지운다. ECS 까지 지울 때는 먼저 /opt/cloudera/parcels/ECS/bin/rke2-uninstall.sh 를 돌린 뒤 /var/lib/rancher, /var/lib/kubelet, /var/lib/longhorn, /docker 를 정리한다. pgsql 은 외부 DB 로 재사용하면 남긴다.
DBS="hue metastore oozie ranger rangerkms rman scm yqm"
declare -A OWNERS=([hue]=hue [metastore]=hive [oozie]=oozie [ranger]=rangeradmin [rangerkms]=rangerkms [rman]=rman [scm]=scm [yqm]=yqm)
for db in $DBS; do
sudo -u postgres psql -c "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname='$db' AND pid<>pg_backend_pid();"
sudo -u postgres psql -d "$db" -c "DROP SCHEMA public CASCADE; CREATE SCHEMA public;"
sudo -u postgres psql -d "$db" -c "ALTER SCHEMA public OWNER TO ${OWNERS[$db]}; GRANT ALL ON SCHEMA public TO ${OWNERS[$db]};"
done
DROP SCHEMA public CASCADE 는 테이블·뷰·시퀀스·함수를 모두 지우면서 DB 와 role, 접속 권한은 남긴다. 재생성된 public 스키마 소유자가 postgres 로 바뀌므로 서비스 계정에 소유권을 돌려주지 않으면 설치 시 스키마 생성 권한 오류가 난다. 실제 소유자 이름은 \l 로 확인한다.
alternatives --config python 에 남은 옛 항목과 psycopg2 버전(Hue 는 Python 3.8 용 2.9.x 이상)은 재설치 전에 정리한다.copy-docker 스크립트를 쓰며 1.5.2 와 1.5.5 의 메커니즘은 같다. 파셀 안은 find /opt/cloudera/parcels/ECS* -iname "*copy-docker*" 로 확인한다.wget 은 Invoke-WebRequest 별칭이라 GNU 옵션이 먹지 않는다. wget.exe 를 설치해 전체 경로로 호출한다.