Cloudera Manager 기반 분산 데이터 처리 플랫폼 구축 및 초기화

1. Cloudera Manager 개요 및 아키텍처

Cloudera Manager(CM)는 대규모 Apache Hadoop 생태계를 위한 Enterprise급 클러스터 관리 도구입니다. 수작업 수주가 소요되던 설치 및 업그레이드 프로세스를 자동화하며, 중앙 집중식 모니터링, 경고 알림, 장애 진단 기능을 제공함으로써 인프라 운영 오버헤드를 획기적으로 낮춥니다.

아키텍처 구성 요소

  • Management Server(MSM): 전역 클러스터 상태 수집, 리소스 할당, Configuration 업데이트 명령을 조율하는 코어 백엔드 서비스입니다.
  • Agent(Agent Process): 각 호스트에 배포되어 MSM의 지시를 수신하고, 로컬 데몬의 Lifecycle(시작/정지/재시작) 및 메트릭 수명을 관리합니다.
  • Persistency Layer(DB): 내부 설정값, 이벤트 로그, 모니터링 시계열 데이터를 저장하기 위해 RDBMS를 사용합니다.
  • Software Distribution(Parcels): 바이너리 패키지를 효율적으로分发하기 위해 설계된 콘텐츠 디스트리뷰션 시스템입니다.
  • Client Interfaces: 브라우저 기반 Admin Console과 RESTful API를 통해 관리자와 개발자가 상호작용할 수 있는 진입점입니다.

주요 기능 영역

기능 카테고리설명
클러스터 라이프사이클 관리노드 추가/제거, 서비스 확장, 무중단 재부팅 지원
실시간 가시성CPU, 메모리, 네트워크 I/O, JVM 힙 사용량 등 핵심 지표를 대시보드로 시각화
자동화된 진단구성 충돌 탐지, 권장사항 제시, 로그 덤프 및 헬스체크 리포트 생성
생태계 통합HDFS, YARN, Hive, Spark, Impala, ZooKeeper 등을 일관된 정책으로 통합 관리

테스트 환경 사양

호스트 IP / 호스트명담당 역할CPURAM
192.168.1.101 (zy1)Server + Agent4 cores16 GB
192.168.1.102 (zy2)Agent2 cores8 GB
192.168.1.103 (zy3)Agent2 cores4 GB

2. 분산 노드 시간 동기화 구성

분산 시스템에서 타임스탬프 불일치는 태스크 스케줄링, 분산 락 충돌, 데이터 정합성 문제로 이어질 수 있습니다. 외부 인터넷 접속이 제한된 환경에서는 자체 NTP 마스터 노드를 구축하여 내부 시간 표준을 강제해야 합니다.

시존 및 NTP 서비스 적용

모든 노드에서 동일한 시크린(Timezone) 기준점을 설정하고, 마스터-슬레이브 구조로 NTP 통신을 활성화합니다.

# 1. 시크린 표준화 (모든 호스트 공통)
cp /usr/share/zoneinfo/Asia/Seoul /etc/localtime

# 2. NTP daemon 설치
yum install -y ntp

# 3. 주요 구성 파일 수정 (/etc/ntp.conf)
# 마스터 노드(192.168.1.101) 기준으로 작성 예시:
# 기존 server 0~n 줄 주석 처리 후 아래 두 줄 추가
server 127.127.1.0
fudge 127.127.1.0 stratum 10

# 슬레이브 노드는 마스터를 참조 대상으로 변경
server 192.168.1.101
fudge 192.168.1.101 stratum 10

# 모든 노드에서 접근 제어 규칙 적용
# restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap nopeer noquery

서비스 활성화 및 검증

systemctl enable ntpd
systemctl restart ntpd

# 동기 상태 확인
ntpstat

3. 운영체제 보안 정책 변경

클러스터 간 포트 바인딩 및 데이터 전송 시 SELinux의 강제 접근 제어가阻碍될 수 있으므로, 관리 모드에서 일시적 또는 영구적 비활성화를 수행합니다.

# /etc/selinux/config 파일 수정
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config

# 즉시 적용을 위해 리부팅 또는 다음 명령어 사용
setenforce 0

4. 관계형 데이터베이스(MariaDB) 배포

CM은 메타데이터 관리를 위해 안정적인 RDBMS를 필요로 합니다. CentOS 7 기본 레포지토리의 구버전 대신 공식 커뮤니티 빌드를 채택하여 설치합니다.

# 1. 공식 MySQL/MariaDB 레포지토리 등록
rpm -Uvh https://repo.mysql.com/mysql-community-release-el7.rpm

# 2. 서버 패키지 설치
yum install -y mysql-server mysql

# 3. 서비스 기동 및 자동실행 설정
systemctl enable mysqld
systemctl start mysqld

# 4. 루트 비밀번호 설정 및 원격 접근 권한 부여
mysqladmin -u root password ''
mysql -u root -p'' -e "
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '' WITH GRANT OPTION;
FLUSH PRIVILEGES;
"

참고: 실제 운영 시에는 최소 권한 원칙에 따라 전용 사용자(cm_user, hive_user 등)를 생성하고 특정 스키마만 접근 허용하는 것이 권장됩니다.

5. Cloudera Manager 설치 및 레포지토리 매핑

CM 바이너리와 CDH(CDH5) 패셀을 다운로드하여 호스트 간 일관된 디렉토리 구조로 배포합니다.

패키지 추출 및 사용자 설정

# CM 아카이브 해제
tar -xzvf cloudera-manager-centos7-cm*.tar.gz -C /opt/bigdata/
cd /opt/bigdata/cloudera

# 에이전트 대상 서버 주소 변경
sed -i 's/server_host=localhost/server_host=192.168.1.101/' cm-*/etc/cloudera-scm-agent/config.ini

# MySQL JDBC 드ライバー 복사
mkdir -p share/cmf/lib
wget -P share/cmf/lib/ https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.47/mysql-connector-java-5.1.47.jar

# dedicated scm 사용자 생성 (로그인 불필요한 시스템 계정)
useradd --system \
  --home=/opt/bigdata/cloudera/cm-*/run/cloudera-scm-server \
  --no-create-home --shell=/bin/false \
  --comment "Cloudera SCM Daemon Account" cloudera-scm

# 소유권 이관 및 scp를 통한 노드 배포
chown -R cloudera-scm:cloudera-scm /opt/bigdata/cloudera/
scp -r /opt/bigdata/cloudera/ 192.168.1.102:/opt/bigdata/
scp -r /opt/bigdata/cloudera/ 192.168.1.103:/opt/bigdata/

CDH Parcels 설정 및 데이터베이스 스키마 초기화

# 마스터 노드: Parcel 레포지토리 경로 생성
mkdir -p /opt/bigdata/cloudera/parcel-repo
chown cloudera-scm:cloudera-scm /opt/bigdata/cloudera/parcel-repo/

# 슬레이브 노드: Parcle 캐시 디렉토리
mkdir -p /opt/bigdata/cloudera/parcels
chown cloudera-scm:cloudera-scm /opt/bigdata/cloudera/parcels/

# MD5 체크섬 파일 이름 수정 (CM 인식 용도)
mv /path/to/CDH*.parcel.sha1 /path/to/CDH*.parcel.sha

# DB 스키마 자동 마이그레이션
/opt/bigdata/cloudera/cm-*/share/cmf/schema/scm_prepare_database.sh \
  mysql cm -h 192.168.1.101 -uroot -p'' \
  --scm-host 192.168.1.101 scm scm ''

6. 서비스 기동 및 Web Wizard 실행

백엔드 프로세스를 순차적으로 시작하면 브라우저에서 포털 인터페이스가 가동됩니다. 초기화 과정 중 데이터베이스 테이블 생성 및 Parcel 인벤토리 스캔이 병렬로 진행되므로 잠시 대기해야 합니다.

프로세스 시작 및 포트 점검

# 매니저 서버 (Master)
./cloudera-scm-server start

# 에이전트 프로세스 (All Nodes)
./cloudera-scm-agent start
netstat -tulnp | grep -E '(7180|7182)'

웹 브라우저에서 http://<MASTER_IP>:7180 으로 접속하여 라이선스 동의, 평가판 선택, 호스트 식별 단계를 거칩니다. Parcel 경로가 자동으로 감지되지 않을 경우, Additional Parcels 메뉴에서 물리적 경로를 직접 입력하고 에이전트를 재시작해야 정상적으로 배포됩니다.

시스템 튜닝 권고사항 반영

클러스터 헬스체크 과정에서 Swap 과 Transparent Huge Pages 설정 관련 경고가 발생할 수 있습니다. 다음 스크립트를 활용하여 모든 노드에 영구 적용합니다.

#!/bin/bash
HOSTS=("192.168.1.101" "192.168.1.102" "192.168.1.103")

for NODE in "${HOSTS[@]}"; do
  # 가상 메모리 스와핑 최소화
  ssh "$NODE" 'sysctl vm.swappiness=10'
  ssh "$NODE" 'echo vm.swappiness=10 >> /etc/sysctl.conf'
  
  # 투명 후면 페이지 컴프레션 비활성화
  ssh "$NODE" 'echo never > /sys/kernel/mm/transparent_hugepage/enabled'
  ssh "$NODE" 'echo never > /sys/kernel/mm/transparent_hugepage/defrag'
done

7. HDFS 서비스 연동 및 환경 검증

Web Wizard 완료 후, Actions > Add Service 창에서 HDFS 를 추가합니다. 설치 중 JAVA_HOME 경로 불일치 에러가 발생한다면, Hadoop 은 내부적으로 전통적인 심볼릭 링크 경로 (/usr/lib/j2sdk1.5-sun) 를 참조하려는 경향이 있습니다. 이를 해결하려면 실제 JDK 경로를 해당 위치로 매핑하는 과정을 수행합니다.

# 실제 JDK 경로 확인
readlink -f $(which java) | sed 's/\/bin\/java//'

# 호환성 심볼릭 링크 생성
ln -sf /usr/java/jdk1.8.0_XXX/ /usr/lib/j2sdk1.5-sun
chmod -R 755 /usr/lib/j2sdk1.5-sun

연결 문제가 해소되면 NameNode 와 DataNode 가 정상적으로 기동되며, dfshealth.html 또는 CLI 명령어(hdfs dfs -ls /) 를 통해 분산 파일 시스템의 상태를 확인할 수 있습니다.

태그: cloudera-manager cdh5 apache-hadoop ntpd mariadb-installation

9월 10일 21:19에 게시됨