Hadoop 클러스터를 안정적이고 효율적으로 구축하기 위해서는 단순히 소프트웨어를 설치하는 데 그치지 않고, 운영체제(OS) 설정부터 시작하여 Hadoop의 세부 구성 요소별 설정, 보안 강화, 그리고 실제 운영 과정에 이르기까지 체계적이고 종합적인 접근이 반드시 필요합니다. 특히 HDFS(Hadoop Distributed File System)와 YARN(Yet Another Resource Negotiator) 같은 핵심 컴포넌트를 중심으로 클러스터 자원을 최적화하고 장애 대응력을 확보하는 것이 중요합니다.
본 가이드는 중소 규모 클러스터 환경, 즉 3노드에서 최대 10노드 정도의 Hadoop 클러스터를 대상으로 하여, 설치 및 구성 과정에서 반드시 점검해야 할 필수 설정과 운영 노하우를 단계별로 상세히 정리하였습니다. 운영체제 레벨에서의 성능 튜닝 및 네트워크 설정, Hadoop의 주요 설정 파일(hdfs-site.xml, yarn-site.xml 등) 구성 방법, 보안을 위한 Kerberos 인증 및 권한 관리, 로그 모니터링과 장애 대응 절차, 그리고 자원 스케줄링과 작업 최적화 방안까지 실무자가 현장에서 바로 적용할 수 있는 실용적인 팁을 포함하고 있습니다.
이 가이드를 따라가면 Hadoop 클러스터가 안정적으로 가동되어 대용량 데이터 저장 및 분산 처리 작업을 원활하게 수행할 수 있을 뿐 아니라, 운영 중 발생할 수 있는 다양한 문제 상황에 대해서도 신속하고 효과적으로 대응할 수 있는 능력을 키울 수 있습니다. 빅데이터 환경 구축을 처음 접하는 분부터 기존에 운영 중인 클러스터의 성능 및 안정성을 개선하고자 하는 실무자까지 폭넓게 활용 가능한 실전 가이드입니다. 아마 현업에 어느정도는 도움이 되지 않을까 싶습니다.
사전 설계: 역할과 네트워크 구조
클러스터 구축 전, 각 노드의 역할과 네트워크 구조를 명확히 설계해야 합니다.
- 노드 역할:
- NameNode & ResourceManager: 클러스터의 핵심 마스터 노드로, 고가용성(HA, High Availability)을 위해 최소 2대 이상 구성하는 것을 권장합니다.
- DataNode & NodeManager: 실제 데이터를 저장하고 작업을 실행하는 워커 노드입니다. 클러스터 규모에 따라 3대 이상으로 구성합니다.
- 네트워크:
- 모든 노드는 고정 IP를 할당받고, 정방향/역방향 DNS 설정을 완료해야 합니다.
- 각 Hadoop 서비스가 사용하는 포트(예: HDFS 9870, YARN RM 8088)를 방화벽에서 허용해야 합니다.
- 스토리지:
- NameNode의 메타데이터는 빠른 I/O를 위해 별도의 SSD에 저장하는 것이 좋습니다.
- DataNode는 여러 개의 디스크를 묶어 사용하는 JBOD(Just a Bunch Of Disks) 방식을 권장합니다. Hadoop 자체의 복제 기능으로 데이터 안정성을 확보하므로, RAID는 지양합니다.
OS 준비 체크리스트 (모든 노드 공통)
모든 클러스터 노드에 공통으로 적용해야 하는 OS 설정입니다.
- 호스트명 및 시간 동기화:
/etc/hostname
과/etc/hosts
를 설정해 모든 노드가 서로를 인식하게 하고, NTP/Chrony를 사용해 노드 간 시간을 동기화합니다. - 스와핑 비활성화: Hadoop은 메모리를 많이 사용하므로, 스와핑을 최소화하기 위해
/etc/sysctl.conf
에vm.swappiness=1
을 설정합니다. - 파일 핸들 수 증가:
/etc/security/limits.conf
에nofile
과nproc
를65535
이상으로 설정해 파일 핸들과 프로세스 수를 늘립니다. - Java 설치: 모든 노드에 동일한 버전의 OpenJDK 11 LTS를 설치하고,
JAVA_HOME
환경 변수를 시스템 전역에 설정합니다. - SSH 설정: Hadoop 전용 사용자를 생성하고, 마스터 노드에서 워커 노드로 패스워드 없이 SSH 접속이 가능하도록 설정합니다.
Hadoop 핵심 설정 (XML 파일)
Hadoop 클러스터의 동작 방식을 결정하는 주요 설정 파일들입니다.
core-site.xml
클러스터의 기본 설정을 정의합니다.
fs.defaultFS
:hdfs://[NameNode 호스트명]
(HA 구성 시hdfs://[클러스터 이름]
)hadoop.tmp.dir
: Hadoop의 임시 파일 저장 경로./data/hadoop/tmp
와 같이 별도 디렉터리를 지정합니다.
hdfs-site.xml
HDFS의 동작을 설정합니다.
dfs.replication
: 데이터 복제본 수를 설정합니다. 운영 환경에서는 3으로 설정하는 것을 권장합니다.dfs.blocksize
: HDFS 블록 크기를 설정합니다. 일반적인 권장값은 128MB입니다.dfs.datanode.data.dir
: DataNode의 데이터 저장 경로를 지정합니다.file:///data/dn1,file:///data/dn2
와 같이 여러 디스크를 지정해 I/O 성능을 높일 수 있습니다.
yarn-site.xml
YARN 리소스 매니저의 설정을 정의합니다.
- 리소스 할당 (매우 중요):
yarn.nodemanager.resource.memory-mb
: 서버 전체 RAM의 80~90%를 할당합니다.yarn.nodemanager.resource.cpu-vcores
: 서버의 논리 코어 수에서 여유분을 제외한 수를 할당합니다.
yarn.nodemanager.vmem-check-enabled
: 메모리 초과 시 작업 실패를 방지하기 위해 이 설정을false
로 지정하는 것이 일반적입니다.
고가용성(HA) 및 보안
안정적인 운영을 위해 HA와 보안은 필수 요소입니다.
- NameNode HA:
- JournalNode를 최소 3대 구성해 NameNode 간 메타데이터 동기화를 유지합니다.
- ZooKeeper와 ZKFC를 사용해 NameNode 장애 시 자동 Failover를 설정합니다.
- 보안:
- 운영 환경에서는 Kerberos를 통해 Hadoop 서비스와 사용자 간의 인증을 강화하는 것이 필수적입니다.
- HDFS에 저장된 데이터는 TDE(Transparent Data Encryption)를 사용해 암호화하여 데이터 유출 위험을 줄일 수 있습니다.
모니터링 및 운영 팁
구축된 클러스터를 안정적으로 운영하기 위한 팁입니다.
- 웹 UI: NameNode(9870), ResourceManager(8088), JobHistoryServer(19888) 등 주요 서비스의 웹 UI를 통해 클러스터 상태를 상시 모니터링합니다.
- 지표 수집: Prometheus와 Grafana를 활용해 HDFS 용량, 블록 상태, 노드 상태 등 핵심 지표를 시각화하고, 임계치 초과 시 알림을 설정합니다.
- 데이터 균형:
hdfs dfsadmin -report
와balancer
명령어를 주기적으로 실행해 DataNode 간의 데이터 용량 균형을 유지합니다. - 배포 자동화: Ansible과 같은 자동화 툴을 사용해 OS 설정, 사용자 계정, Hadoop 설정을 일괄적으로 관리하면 휴먼 에러를 줄이고 배포 시간을 단축할 수 있습니다.
Disclaimer: 본 블로그의 정보는 개인의 단순 참고 및 기록용으로 작성된 것이며, 개인적인 조사와 생각을 담은 내용이기에 오류가 있거나 편향된 내용이 있을 수 있습니다.