노드에서 CM·CDP 를 언인스톨(유닉스 사용자, /var/lib 삭제) 하고 재설치하는 과정에서 겪은 문제를 정리한다. 파슬 디렉터리는 지웠지만 /etc/alternatives 에 깨진 링크가 남았고, 삭제된 사용자 UID 로 소유된 파일 때문에 에이전트가 죽었으며, 파슬 P2P 배포가 stall 되고, 재설치 뒤 Ozone Datanode 가 포트 충돌로 뜨지 않았다.
/etc/alternatives 는 OS 전체가 공용으로 쓰는 저장소이므로 디렉터리를 통째로 지우면 java, python3, pgsql-* 등이 함께 날아간다. /opt/cloudera/parcels 를 가리키는 항목만 제거한다. 파슬이 이미 삭제된 상태에서는 readlink -f 가 빈 값을 돌려주므로 옵션 없는 readlink 를 쓴다.
# 목록 확인
for link in $(ls /etc/alternatives); do
target=$(readlink "/etc/alternatives/$link" 2>/dev/null)
[[ "$target" == *"/opt/cloudera/parcels"* ]] && echo "$link -> $target"
done
# 제거
for link in $(ls /etc/alternatives); do
target=$(readlink "/etc/alternatives/$link" 2>/dev/null)
[[ "$target" == *"/opt/cloudera/parcels"* ]] && alternatives --remove-all "$link"
done
--remove-all 이 특정 항목에서 실패하면 /etc/alternatives/<name> 과 /var/lib/alternatives/<name> 을 직접 지운다. 파슬을 다시 activate 하면 CM 이 alternatives --install 로 재등록하므로 수동으로 만들 필요는 없다. 재설치 뒤 /etc/alternatives 항목이 많아 보여도 모두 하나의 파슬 버전을 가리키면 정상이며, 옛 파슬 잔재는 /opt/cloudera/parcels 와 parcel-repo 를 보고 CM 의 Parcels 메뉴에서 Remove from Hosts → Delete 로 지운다.
KeyError: 'uid not found: 974'
cloudera-scm 사용자를 삭제했지만 그 UID 로 소유된 파일이 /var/lib, /var/run, /var/log/cloudera-scm-agent 아래에 남아 mkworkdir() 에서 getpwuid 가 실패한 것이다.
find /var/lib/cloudera-scm-agent /var/run/cloudera-scm-agent /var/log/cloudera-scm-agent -uid 974
systemctl stop cloudera-scm-agent
rm -rf /var/lib/cloudera-scm-agent /var/run/cloudera-scm-agent /var/log/cloudera-scm-agent/*
재설치 시 패키지가 사용자를 새 UID 로 다시 만든다. 데이터를 보존해야 하면 chown -R 로 소유권만 바꾼다.
getent hosts <host> 가 ::1 만 돌려주면 torrent 기반 P2P 파슬 배포가 IPv4 소켓을 잡지 못해 stall 된다. /etc/hosts 에 IPv4 항목을 추가하고 CRLF 가 섞이지 않았는지 확인한다.
cat -A /etc/hosts | grep -i <host> # 줄 끝이 ^M$ 이면 CRLF
sed -i 's/\r$//' /etc/hosts
getent ahostsv4 <host>
ss -tlnp | grep 7180 # [::]:7180 만 있으면 IPv6 전용 바인딩
우회로는 CM → Administration → Settings → Parcels → Enable Peer to Peer Parcel Distribution 을 끄고 CM 서버에서 HTTP 직접 다운로드로 바꾸는 것이다.
로그의 RedactorAppender ClassNotFoundException 은 알려진 무해한 메시지이고, 실제 원인은 다음이다.
java.net.BindException: Problem binding to [0.0.0.0:9864] Address already in use
Ozone Datanode 의 hdds.datanode.client.port 기본값이 HDFS DataNode HTTP 포트(9864) 와 겹친다. CM → Ozone → Configuration → ozone-site.xml Safety Valve 에 추가하고 Ozone 을 재시작한다.
<property>
<name>hdds.datanode.client.port</name>
<value>19864</value>
</property>
ss -tlnp | grep -E "9864|19864"