패키지로 제공되는 상용 소프트웨어인데도 매뉴얼찾기 더럽게 힘들고, 사전작업 내역도 확인하기 힘들고, 해야 되는일이 더럽게 많아서 만들어본 Cloudera Inspector.
아무리 자동화를 하려고 해도 최소한의 사전작업은 필요하다.
# private key 생성
openssl genrsa -out id_rsa 1024
# 이 때 ~/.ssh/id_rsa 파일이 생성된다. 이 파일을 업로드 해야 한다.
# public key 생성
ssh-keygen -y -f id_rsa > id_rsa.pub
# authoorized_keys 생성.
cat id_rsa.pub >> authorized_keys
# 노드로 등록할 각 서버에 authorized_keys를 복사 해줘야 한다.
scp ~/.ssh/authorized_keys $TARGET_NODE:/home/account/.ssh/authorized_keys
# 파일 / 디렉토리 권한 조정
# .ssh 디렉토리는 700 / id_rsa, authorized_keys 는 600
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa ~/.ssh/authorized_keys
# id_rsa는 비밀키 / id_rsa.pub은 공개키. 공개키를 authorized_keys에 넣으면 신뢰하는 키가 된다.
릴리즈 페이지에서 OS에 맞는 설치 파일을 다운로드한다.
기본적인 골격은 동일하다. el8 / el9 각각에 맞는 python 바이너리와 라이브러리가 포함되어있다.
| 파일 | 대상 |
|---|---|
cloudera_inspector_haedong_x.x.x_el8.run |
RHEL/Rocky 8.x (Python 라이브러리 포함) |
cloudera_inspector_haedong_x.x.x_el9.run |
RHEL/Rocky 9.x (Python 라이브러리 포함) |
cloudera_inspector_haedong_x.x.x_minimal.run |
라이브러리 미포함 (pip install 필요) |
chmod +x cloudera_inspector_haedong_1.0.1_el8.run
sudo ./cloudera_inspector_haedong_1.0.1_el8.run
대화형 설치가 시작된다.
Step 1/6: 시스템 환경 확인
OS, Python, 라이브러리 자동 감지
Step 2/6: 설치 경로
기본값: /opt/cloudera_inspector
기존 설치 감지 시 업그레이드 (데이터 유지)
Step 3/6: 포트 설정
기본값: 8000
사용 중인 포트 감지 시 대체 포트 안내
Step 4/6: 서비스 등록
systemd 서비스 등록 여부 선택 (부팅 시 자동 시작)
Step 5/6: 설치 확인
설정 요약 표시 후 확인
Step 6/6: 설치 실행
파일 복사 → 디렉터리 생성 → systemd 등록 → 시작
http://<서버IP>:8000
기본 패스워드: votmdnjem
로그인 후 우측 상단 [패스워드 변경] 에서 변경 가능.
systemd로 등록한 경우:
systemctl start cloudera-inspector # 시작
systemctl stop cloudera-inspector # 중지
systemctl restart cloudera-inspector # 재시작
systemctl status cloudera-inspector # 상태
journalctl -u cloudera-inspector -f # 로그
수동 실행:
/opt/cloudera_inspector/bin/run.sh
모든 노드에 동일한 SSH 자격증명을 사용한다.
# /etc/sudoers.d/cloudera
haedong ALL=(ALL) NOPASSWD: ALL
입력 형식: 계정@호스트 (여러 줄, 콤마, 공백 구분 가능)
root@192.168.1.10
root@192.168.1.11, root@192.168.1.12
haedong@192.168.1.20
계정 생략 시 자격증명에 설정된 사용자명을 사용한다.
각 노드에 역할과 타입을 지정한다.
| 역할 | 타입 | 설명 |
|---|---|---|
| Base | Master | CM Server, NameNode, ResourceManager 등 |
| Base | Utility | CM DB, Gateway, Edge 등 |
| Base | Worker | DataNode, NodeManager |
| Base | Gateway | 클라이언트 접속 전용 |
| Data Services | Worker | ECS/OCP K8s 노드 |
노드 추가 시 SSH 연결 테스트가 자동 실행된다.
노드 관리 페이지에서 CDP 문서 버전을 설정할 수 있다.
사전정비 항목의 (i) 공식 문서 링크가 선택한 버전에 맞게 변경된다.
| 프리셋 | 설명 |
|---|---|
| CDP 7.1.9 (LTS) | 기본값 |
| CDP 7.3.1 | 2024-12 릴리스 |
| CDP 7.3.2 | 2026-03 릴리스, JDK 17 필수 |
| 직접 입력 | 신규 버전 대응 시 Base URL 입력 |
Inspector는 repo/ 디렉터리를 HTTP로 노출하여 내부 RPM/Parcel 저장소 역할을 한다.
http://<서버IP>:8000/repo/
대상 노드의 /etc/yum.repos.d/에 .repo 파일을 배포하면 dnf install로 패키지를 설치할 수 있다.
| 레포 | 용도 | 필수 |
|---|---|---|
| CM RPM | Cloudera Manager 서버/에이전트 패키지 | 필수 |
| CDH Parcel | Cloudera Runtime (CM이 배포) | 필수 |
| PostgreSQL RPM | PostgreSQL 서버 패키지 | 필수 |
| JDK RPM | OpenJDK 17 패키지 | 권장 |
| OS AppStream | 기본 패키지 (폐쇄망 시) | 상황별 |
설치 전 repo/default/ 디렉터리에 RPM repo를 배치하면 서버 시작 시 자동 인식된다.
/opt/cloudera_inspector/repo/default/
├── cm-7.11.3/ # createrepo로 생성된 CM RPM repo
│ ├── repodata/
│ └── *.rpm
├── cdh-7.1.9/ # CDH parcel 파일
│ ├── manifest.json
│ └── *.parcel
├── pgsql-16/ # PostgreSQL RPM repo
│ ├── repodata/
│ └── *.rpm
└── jdk-17/ # JDK RPM repo
├── repodata/
└── *.rpm
디렉터리명은 자유 — repodata/repomd.xml 존재 여부로 자동 인식한다.
.tar, .tar.gz, .tgz, .tar.bz2, .tar.xzrepodata/ 위치를 감지하여 배치외부 repo 서버가 있는 경우 .repo 파일 내용을 직접 입력한다.
[my-internal-repo]
name=My Internal Repo
baseurl=http://repo.internal/centos/8/x86_64/
gpgcheck=0
enabled=1
서버 로컬 파일시스템의 기존 repo 경로를 링크한다.
| 기능 | 설명 |
|---|---|
| 활성화/비활성화 | 토글 — 비활성화하면 노드 배포에서 제외 |
| 삭제 | custom 레포만 삭제 가능 (default는 보존) |
| 편집 | repo URL, 이름 등 수정 |
| 배포 | 선택한 레포의 .repo 파일을 전체 노드에 배포 |
/etc/yum.repos.d/에 .repo 파일이 생성됨dnf install 가능배포 전 검증이 필요한 경우:
dnf install --assumeno 실행 → 결과 확인 → 임시 파일 정리자동 수정 시 시스템 부팅 불가 등 치명적 문제를 유발할 수 있는 항목.
가이드를 참고하여 사용자가 직접 확인/수정해야 한다.
| 항목 | 설명 | 가이드 요약 |
|---|---|---|
| OS 배포판/버전 | CDP 지원 OS인지 확인 | RHEL/Rocky 8.4~8.10, 9.1~9.4 |
| 커널 버전 | 배포판 기본 커널인지 확인 | el8: 4.18.x / el9: 5.14.x |
| 마운트 옵션 | /tmp noexec 여부, noatime 권장 | fstab 수정은 부팅 위험 |
| cgroup v1 전환 | cgroup v2 → v1 (DS 노드) | GRUB 수정 + 재부팅 |
노드 선택 후 [선택 노드 설정 적용]으로 일괄 수정된다.
수정 전 대상 파일이 .cdp_backup_<timestamp>로 자동 백업된다.
| 항목 | 설명 | 수정 내용 |
|---|---|---|
| /etc/hosts 배포 | 클러스터 노드 호스트 파일 | 자동 생성 후 전 노드 배포 |
| SELinux permissive | SELinux 모드 변경 | setenforce 0 + config 수정 |
| THP enabled/defrag | Transparent Huge Pages 비활성화 | echo never > /sys/... |
| THP 영구 비활성화 | rc.local에 등록 | 재부팅 후에도 유지 |
| sysctl 커널 파라미터 | vm.swappiness, somaxconn 등 | 역할별 99-cdp.conf 배포 |
| 불필요 서비스 비활성화 | firewalld, tuned 등 8개 | systemctl disable --now |
| chronyd NTP | NTP 동기화 | systemctl enable --now |
| nscd DNS 캐싱 | DNS 캐시 서비스 | 설치 + 활성화 |
| rngd 엔트로피 | 엔트로피 서비스 | 설치 + 활성화 |
| ulimit 설정 | nofile/nproc 상향 | /etc/security/limits.d/ |
| 가상 브릿지 제거 | virbr0 제거 | ip link delete |
| JDK 설치 | OpenJDK 17 | dnf install (실패 시 가이드) |
| 필수 패키지 | perl, bind-utils 등 | dnf install |
| JDBC 드라이버 | PostgreSQL JDBC | dnf install + symlink |
DS 역할 노드에만 적용되는 항목. DataService 태그로 표시된다.
| 항목 | 설명 |
|---|---|
| IP forwarding | net.ipv4.ip_forward, conf.all.forwarding |
| bridge-nf-call | bridge-nf-call-iptables, ip6tables |
| IPv6 활성화 | Base와 반대 — K8s CNI 필요 |
| inotify 제한 | max_user_watches, max_user_instances |
| br_netfilter 모듈 | 커널 모듈 로드 + 영구 등록 |
참고용 수집 항목. 자동 수정 대상이 아니다.
디스크/파티션, 주요 디렉터리 용량, FQDN, 역방향 DNS, 호스트명 유효성,
OS/커널 버전, 메모리/CPU, CM 포트, /tmp noexec, 엔트로피, NIC 속도,
가상화 탐지, nsswitch.conf
항목별로 Pass 노드와 수정 필요 노드가 표시된다.
접기/펼치기 가능 (헤더 클릭).
노드 배지 클릭(다중 선택 가능) → 하단에 노드별 탭으로 상세 결과 표시.
필수-수동 / 필수-자동 / 권장 섹션으로 구분된다.
요약 테이블에서 항목 행 클릭 시 확장되어 노드별 현재값과 상태를 표시한다.
hosts_file 항목은 [hosts 편집/배포] 버튼, chronyd 항목은 [NTP 서버 설정] 버튼이 표시된다.
<HOSTNAME>으로 표시되면 직접 입력# /etc/hosts — managed by Cloudera Inspector
127.0.0.1 localhost localhost.localdomain
::1 localhost localhost.localdomain
# CDP cluster nodes
# IP FQDN SHORT # ROLE/TYPE
192.168.1.10 master01.example.com master01 # base/master
192.168.1.20 worker01.example.com worker01 # base/worker
설정 적용 후 문제가 발생하면 백업 파일에서 원래 상태로 복원할 수 있다.
롤백 가능 항목:
| 항목 | 백업 파일 |
|---|---|
| SELinux | /etc/selinux/config |
| THP 영구 | /etc/rc.d/rc.local |
| sysctl | /etc/sysctl.d/99-cdp.conf, /etc/sysctl.conf |
| cgroup | /etc/default/grub |
| chronyd | /etc/chrony.conf |
| ulimit | /etc/security/limits.d/99-cdp.conf |
| /etc/hosts | /etc/hosts |
| br_netfilter | /etc/modules-load.d/br_netfilter.conf |
패키지 설치 (JDK, 필수 패키지 등)는 롤백 대상이 아니다.
설정 적용 실패 시 자동으로 원인을 분류하여 표시한다.
| 분류 | 진단 메시지 예 |
|---|---|
| 권한 | 권한 부족 — sudo 설정 또는 파일 권한 확인 필요 |
| sudo | sudo 권한 없음 — /etc/sudoers에 사용자 추가 필요 |
| 패키지 | 패키지를 찾을 수 없음 — repo 미등록 또는 패키지명 확인 |
| 네트워크 | 외부 repo 접속 불가 — 폐쇄망 환경에서 내부 repo 설정 필요 |
| 파일시스템 | 디스크 공간 부족 / 읽기 전용 파일시스템 |
| DNS | DNS 해석 실패 — /etc/hosts 또는 DNS 서버 확인 |
| 서비스 | systemd 서비스 없음 — 패키지 미설치 |
원인이 복합적이면 가능한 원인 목록을 모두 표시한다.
| 항목 | 기본값 | 설명 |
|---|---|---|
| 대상 노드 | Master/Utility 노드 | PostgreSQL 설치 서버 |
| 버전 | 16 | PostgreSQL 메이저 버전 |
| 데이터 디렉터리 | /postgresql/16/data | PGDATA 경로 |
| 레포 | 자동 감지 | 등록된 PostgreSQL repo |
| DB 패스워드 | (입력) | 모든 CDP DB 유저 공통 |
| DB | 유저 | 용도 | 필수 |
|---|---|---|---|
| scm | scm | Cloudera Manager Server | 필수 |
| rman | rman | Reports Manager | 필수 |
| hue | hue | Hue | 필수 |
| hive | hive | Hive Metastore | 필수 |
| oozie | oozie | Oozie | 필수 |
| ranger | rangeradmin | Ranger | 필수 |
| rangerkms | rangerkms | Ranger KMS | 선택 |
| schemaregistry | schemaregistry | Schema Registry | 선택 |
| smm | smm | Streams Messaging Manager | 선택 |
| das | das | Data Analytics Studio | 선택 |
root superuser (패스워드: Hadoop1!)는 항상 자동 생성된다.
Phase 1: repo 파일 배포 (/etc/yum.repos.d/)
Phase 2: dnf install postgresql16-server
Phase 3: 데이터 디렉터리 생성 + initdb
Phase 4: postgresql.conf 배포 (listen_addresses='*', max_connections=300)
Phase 5: pg_hba.conf 배포 (scram-sha-256)
Phase 6: systemd override (커스텀 PGDATA)
Phase 7: 서비스 시작
Phase 8: CDP DB/유저 생성
Phase 8-1: root superuser 생성
Phase 9: JDBC 드라이버 설치 + symlink
Phase 10: 설치 검증 (DB/유저 목록 출력)
Master-Replica 구성이 필요한 경우:
추가 실행 단계:
Phase 8-2: Master — replicator 계정 생성 + 재시작 (wal_level=replica)
Phase 8-3: Replica — PostgreSQL 설치 → pg_basebackup → 서비스 시작
Master — pg_stat_replication 으로 Streaming 상태 확인
Master postgresql.conf에 추가되는 설정:
wal_level = replica
max_wal_senders = 5
wal_keep_size = 512MB
hot_standby = on
검증 사항:
| 항목 | 설명 |
|---|---|
| 대상 노드 | CM Server 설치 호스트 |
| CM 레포 | 등록된 CM RPM repo |
| DB 호스트/포트 | PostgreSQL 서버 주소 |
| DB 이름/유저/패스워드 | scm DB 정보 |
| Agent 배포 | 전체 노드에 CM Agent 설치 여부 |
Phase 1: CM repo 파일 배포
Phase 2: cloudera-scm-server 패키지 설치
Phase 3: db.properties 자동 생성
Phase 3-1: scm_prepare_database.sh 실행
Phase 4: cloudera-scm-server 서비스 시작
Phase 5: systemctl 상태 확인
Phase 6: Jetty 기동 대기 (최대 3분, 로그 폴링)
Phase 7: CM Agent 시작 (대상 노드)
Phase 8: Parcel 레포 자동 등록 (CDH repo가 있는 경우)
Phase 9: 폐쇄망 설정 자동 적용
Phase 10: Agent 전체 노드 배포 (선택)
CM 설치 후 자동으로 적용되는 설정:
| 설정 | 값 | 목적 |
|---|---|---|
| PHONE_HOME | false | Cloudera 진단 데이터 전송 비활성화 |
| CLUSTER_STATS_SCHEDULE | 빈 값 | 예약 통계 수집 비활성화 |
| ALLOW_USAGE_DATA | false | 사용 데이터 수집 비활성화 |
| PARCELS_AUTO_REFRESH_ENABLED | false | 외부 Parcel 자동 갱신 비활성화 |
| TELEMETRY_MASTER | false | 원격 측정 비활성화 |
| TELEMETRY_ALTUS_ACCOUNT | 빈 값 | 클라우드 연동 비활성화 |
| GBN_ENABLED | false | Cloudera 버그 보고 비활성화 |
CM에 기본 등록된 Cloudera 외부 레포를 제거할 수 있다.
제거 대상 도메인:
archive.cloudera.comrepository.cloudera.comcloudera-build-us-west-1내부 도메인 (haedongg.net 등)과 사설 IP는 제거 대상이 아니다.
CM 설치 시도 시 사전 검사 이력에 따라 분기한다.
| 상태 | 동작 |
|---|---|
| 검사 이력 없음 | 검사 먼저 실행 안내 |
| 실패 항목 있음 | 실패 목록 표시 + 계속 진행 여부 확인 |
| 전체 통과 | 즉시 설치 진행 |
Impala, HiveServer2 등의 부하 분산용 TCP 프록시.
Master 노드에만 설치한다.
시스템 사양에 따라 자동 조정된다.
| 파라미터 | 계산 |
|---|---|
| nbthread | min(nproc, 64) |
| tune.bufsize | 메모리 기반 자동 계산 |
| maxconn | min(메모리MB × 4, 50000) |
systemctl disable 상태로 유지 (자동 시작 안 함)[작업 로그] 탭에서 날짜별 작업 이력을 확인할 수 있다.
[리포트 생성] 클릭 시 Markdown 형식의 작업 요약 리포트를 생성한다.
포함 내용:
패스워드 관련 내용은 자동 마스킹 처리된다.
| 표시 | 의미 |
|---|---|
| 녹색 테두리 | 검사 전체 Pass |
| 빨간 테두리 + 숫자 | Fail 항목 수 |
| 회색 테두리 | 미검사 |
| ⟳ 파란 펄스 | 검사 진행 중 |
| ⚙ 보라 펄스 | 설정 적용 진행 중 |
| ✓ 채워진 배경 | 선택됨 |
| 표시 | 의미 |
|---|---|
수동 주황 태그 |
자동 수정 위험 — 직접 확인 필요 |
DataService 파란 태그 |
DS 노드 전용 |
Base 녹색 태그 |
Base 노드 전용 |
| (i) 원형 버튼 | Cloudera 공식 문서 링크 |
| 🔄 | 재부팅 필요 |
출처 표기 하에 자유롭게 이용 및 배포 가능. 질문, 버그 리포트 전혀 절대 받지 않음.