HDFS NameNode 2대가 모두 다운됐다. ZKFC 로그에는 SocketTimeoutException과 SERVICE_NOT_RESPONDING이, NameNode 로그에는 70초 이상의 JVM pause(GC 로그상 CMS concurrent mode failure)가 남아 있다. pause 동안 ZKFC가 다른 노드로 페일오버를 진행했고, 저널노드의 에포크가 53에서 54로 올라간 뒤, pause에서 돌아온 원래 NameNode가 오래된 에포크(53)로 쓰기를 시도하다 스스로 종료했다.
GC pause의 근본 트리거(단순 블록 수 증가인지, 특정 시점의 메모리 압박인지)는 원본에서 최종 확정되지 않았다. 힙을 48GB로 올린 뒤 "현재까지 힙 관련 다른 에러 사항은 없다"는 고객 확인까지만 기록돼 있고, 장기간 재발 여부에 대한 추가 코멘트는 없다.
CMS GC의 concurrent mode failure로 인한 장시간 Stop-The-World 정지가 직접 원인이며, 블록 수 대비 NameNode 힙 사이즈가 부족했던 것으로 보고 힙을 늘렸다(14GB에서 24GB로, 이후 48GB까지 증설한 사례도 있음).
확인 수준: 원본에서 해결 확인 · 실행 절차 보강
적용 조건: <...>와 예시 DB·테이블·경로·수치는 실제 확인값으로 바꾼다. 명령과 메뉴는 참고 문서를 바탕으로 보강한 예시이며 대상 시스템에서 실행하지 않았다. 버전·원인에 따른 분기와 남은 확인 사항은 아래에 명시한다.
grep -E "SocketTimeoutException|SERVICE_NOT_RESPONDING" /var/log/hadoop-hdfs/*zkfc*.log
grep "JvmPauseMonitor" /var/log/hadoop-hdfs/*namenode*.log
grep "concurrent mode failure" /var/log/cdp/hadoop-hdfs/gc-*.log
grep "epoch is less than the last promised epoch" /var/log/hadoop-hdfs/*journalnode*.log
hdfs dfsadmin -report | grep -i "blocks"
CM > HDFS > Configuration > NameNode Default Group > Java Heap Size of Namenode에서 현재 값을 확인한다. Cloudera 공식 가이드는 100만 블록당 약 1GB의 힙 메모리를 권장한다.
블록 수 기준 권장치보다 힙이 작다면 늘린다. 다만 필요 이상으로 크게 설정하면 오히려 GC 비용이 늘어나 문제가 악화될 수 있으므로, 권장치를 크게 초과해 설정하지 않는다.
힙 증설 후에도 concurrent mode failure가 반복되면, GC 알고리즘(G1GC 등) 전환이나 추가적인 힙 재산정을 검토한다.
HA 페일오버 자체가 GC pause 한 번에 잘못 발동하지 않도록, ZKFC의 health check timeout(ha.health-monitor.rpc-timeout.ms 등)도 함께 점검한다.
힙 증설 이후 GC 로그에서 concurrent mode failure나 장시간 pause가 재발하지 않는지, NameNode가 예기치 않게 재시작되지 않는지 관찰한다.