EMR의 유형별 노드
AWS EMR(Amazon Elastic MapReduce) 클러스터는 다음 세 가지 유형의 노드로 구성됨.
1. 프라이머리 노드(Primary Node)
2. 코어 노드(Core Node)
3. 태스크 노드(Task Node)
여기서 각 노드는 Hadoop/Spark 등 다양한 빅데이터 프레임워크를 실행하는 데 필요한 역할을 분담함.
클러스터 운영 및 확장/축소에도 중요한 영향을 미침.
프라이머리 노드 : 주요 역할
1. 클러스터 전반 제어 및 코디네이션
프라이머리 노드는 클러스터를 제어하고 관리하는 핵심 역할을 수행함.
전통적인 용어로는 "마스터 노드(Master Node)"라고도 하며, 아래와 같은 주요 프로세스를 실행함.
Hadoop YARN ResourceManager: 전체 클러스터에서 자원을 스케줄링하고 애플리케이션(예: Spark Job, Hadoop MapReduce Job)이 사용할 자원을 할당함.
HDFS NameNode: Hadoop Distributed File System(HDFS)의 메타데이터(블록 위치, 파일 정보 등)를 관리함.
Spark Master (Spark를 사용하는 경우): Spark 애플리케이션을 스케줄링하고 Executor를 할당함.
Hive Server / Hive Metastore (Hive를 사용하는 경우): HiveQL 쿼리를 관리하고, 테이블 메타데이터를 조회/저장함.
2. 모니터링 및 로깅
프라이머리 노드는 클러스터 상태(노드 상태, 실행 중인 작업, 리소스 사용량 등)를 모니터링함.
Spark UI, Yarn ResourceManager UI, Ganglia 등의 대시보드가 프라이머리 노드에서 실행되는 경우가 많음.
3. 사용자 인터페이스(엔드포인트)
일반적으로 사용자는 프라이머리 노드에 SSH 접속하거나, Jupyter Notebook(EMR Notebooks), Zeppelin 등과 같은 인터페이스를 통해 쿼리/애플리케이션을 실행함.
프라이머리 노드 : 확장성 및 고가용성 고려
1. 단일 노드 구성
EMR 클러스터에는 기본적으로 하나의 프라이머리 노드만 존재함.
만약 프라이머리 노드가 장애가 발생하면 클러스터 전체가 영향을 받을 수 있으므로, 모니터링 및 백업 전략이 중요함.
2. 멀티 마스터(High Availability) 구성
Amazon EMR에서 고가용성이 필요한 경우, 특정 버전부터 클러스터 생성 시 멀티 마스터(프라이머리 노드 다중화) 구성을 선택할 수 있음.
이렇게 구성하면 NameNode나 ResourceManager가 장애가 나더라도 자동으로 페일오버 되어 전체 클러스터 가용성을 높일 수 있음.
코어 노드 : 주요 역할
1. HDFS 데이터 스토리지
코어 노드는 HDFS 데이터 노드(DataNode) 프로세스를 실행하여 실제 데이터 블록을 저장함.
즉, 클러스터 내에서 영구적인 데이터를 호스팅하는 역할을 함.
2. 데이터 처리
코어 노드는 YARN NodeManager를 실행하며, Spark Executor 또는 MapReduce Task 등을 수행하여 병렬 분산 처리를 담당함.
3. 안정적인 스토리지 보존
코어 노드는 클러스터가 종료되지 않는 한 HDFS 상의 데이터를 지속적으로 보관함.
이는 배치 작업이 끝나도 데이터가 유지되어야 하는 워크로드(장기 실행 클러스터 등)에서 중요함.
코어 노드 : 확장/축소 시 주의 사항
1. 수평 확장(스케일 아웃)
더 많은 코어 노드를 추가해 HDFS 스토리지 용량과 분산 처리 성능을 확장할 수 있음.
Hadoop/Spark 작업에 필요한 CPU/메모리가 부족한 경우 유용함.
2. 축소 시 주의점
코어 노드를 줄이면 해당 노드가 가지고 있던 HDFS 블록을 재배치해야 하며, 잘못하면 데이터 손실 위험이 있을 수 있음.
따라서 코어 노드는 신중하게 축소해야 하며, 축소 시 자동으로 리밸런싱(rebalancing)이 일어나도록 설정해야 함.
코어 노드 : Auto Scaling 활용
코어 노드에 대해 오토 스케일링 정책을 구성하여 YARN 메모리, CPU 사용량 등에 따라 동적으로 노드를 추가할 수 있음.
그러나 축소의 경우에는, HDFS 데이터를 옮겨야 하므로 장애 위험이 있을 수 있으며, 클러스터 성능에 일시적인 영향을 줄 수 있으므로 모니터링이 필수적임.
태스크 노드 : 주요 역할
1. HDFS 미포함(비영구 스토리지)
태스크 노드는 HDFS DataNode 프로세스를 실행하지 않음.
즉, HDFS에 블록을 저장하지 않으며, 영구적인 데이터 보존 기능이 없음.
2. 순수 작업(Compute) 처리 전담
태스크 노드는 YARN NodeManager를 통해 Spark Executor나 MapReduce Task 등 연산만 담당함.
데이터는 코어 노드(또는 S3)에서 가져와 처리하고, 결과를 다시 HDFS/S3 등에 기록함.
태스크 노드 : 비용 효율성
1. 스팟 인스턴스 활용에 최적
태스크 노드에 스팟 인스턴스를 할당하면, 온디맨드보다 훨씬 저렴한 비용으로 단기적이고 확장 가능한 작업 노드 풀을 운영할 수 있음.
2. 유연한 확장·축소
HDFS가 없으므로 축소할 때도 데이터 재배치가 필요하지 않아 코어 노드보다 훨씬 자유롭게 스케일 인/아웃을 수행할 수 있음.
3. 결과적으로 TCO 절감
작업이 몰릴 때만 태스크 노드를 대량으로 추가(특히 스팟 사용), 작업 완료 시 신속하게 리소스를 회수함으로써 비용을 줄일 수 있음.
태스크 노드 : 활용 시 고려 사항
1. 스팟 인스턴스 회수 리스크
스팟 인스턴스가 시장 가격 상승 등으로 회수될 수 있으므로, Spark나 Hadoop 작업이 중단되거나 재시작될 수 있다는 점을 고려한 내결함성(Checkpointing, RDD 라인리지, 재시도 정책 등) 설계가 필요함.
2. 데이터 접근
태스크 노드는 코어 노드 혹은 S3에서 데이터를 네트워크로 가져와야 하므로, 네트워크 I/O 및 대역폭도 고려해야 함.
노드별 비교 요약
1. 역할
프라이머리 노드 : 클러스터 제어, 리소스 스케줄링, 메타데이터 관리
코어 노드 : HDFS 블록 저장, 분산 처리
태스크 노드 : 순수 계산 담당, HDFS 저장 X
2. HDFS 참여 여부
프라이머리 노드 : HDFS NameNode 역할, 실제 데이터 저장 X
코어 노드 : DataNode로 참여, 블록 저장
태스크 노드 : HDFS 참여 X
3. 데이터 영속성
프라이머리 노드 : 없음(메타데이터 서버)
코어 노드 : 영구적인 스토리지(HDFS에 데이터 유지)
태스크 노드 : 없음(컴퓨팅 전용, 임시 로컬 저장만 가능)
4. 스케일링
프라이머리 노드 : 단일(또는 멀티 마스터 구성 시 다중)
코어 노드 : 확장 가능(축소 시 데이터 재배치 주의)
태스크 노드 : 자유롭게 확장 및 축소 가능(스팟 활용에 적합)
5. 장애 시 영향
프라이머리 노드 : NameNode, ResourceManager 등 장애 시 클러스터 전체 영향
코어 노드 : 일부 코어 노드 장애 시 HDFS 복제 및 자동 복구
태스크 노드 : 태스크 실패 시 재시작 가능, 클러스터 전체 영향 적음
6. 주요 활용
프라이머리 노드 : 클러스터 설정 및 관리, 메타데이터 저장, 작업 스케줄링
코어 노드 : HDFS 기반 데이터 저장, 대부분의 분산 연산 수행
태스크 노드 : 스팟 인스턴스를 통한 비용 효율적 대규모 계산
운영 전략
1. 프라이머리 노드 고가용성 고려
대규모 프로덕션 환경에서는 EMR 멀티 마스터 구성을 검토하여 장애에 대비함.
CloudWatch, Ganglia 등을 통해 주기적으로 프라이머리 노드 자원 사용량을 모니터링하고 알림을 설정함.
2. 코어 노드 수량 설계
최소 1개 이상의 코어 노드가 필요하며, 작업 부하 및 데이터 저장량에 따라 적절히 조정함.
데이터가 많은 경우, 코어 노드 용량(스토리지) 및 리소스(CPU, 메모리)를 충분히 확보해야 함.
3. 태스크 노드 활용 극대화
일시적이고 재시작 가능한 작업(ETL, 임시 애드혹 쿼리 등)에 태스크 노드를 활용함.
스팟 인스턴스를 적극적으로 사용하여 비용을 절감하되, 워크로드 중단에 대한 재시도, 체크포인트 설계를 함께 고려함.
4. Autoscaling 정책
CPU/메모리 사용률, YARN 큐 사용률 등을 감지해 코어/태스크 노드를 자동으로 증감시키는 정책을 설정함.
태스크 노드는 자유롭게 줄여도 HDFS 데이터 영향이 없지만, 코어 노드 축소 시에는 신중한 검토가 필요함.
5. 데이터 레이아웃 및 접근 패턴
S3를 통한 외부 스토리지 활용, HDFS와 병행 사용 전략을 세워 탄력적인 스케일 인/아웃이 가능하도록 설계함.
ETL 완료 후 불필요한 코어 노드를 축소하고, 데이터는 S3로 옮겨두는 방식도 자주 사용됨.
정리
1. 프라이머리 노드(Primary Node)
클러스터 운영의 “두뇌” 역할로, NameNode, ResourceManager, Spark Master 등 메타데이터와 스케줄링 프로세스를 담당함.
2. 코어 노드(Core Node)
HDFS에 데이터를 저장하면서 동시에 작업을 수행하는 중추적 노드임.
데이터의 영구적 보존이 필요한 경우 반드시 하나 이상의 코어 노드가 있어야 함.
3. 태스크 노드(Task Node)
데이터 저장(HDFS)에 참여하지 않고, 순수하게 작업(Compute)만 수행하는 노드임.
스팟 인스턴스 활용을 통해 비용 효율적인 확장·축소가 가능하다는 것이 장점임.
EMR 노드를 적절히 구분하고 운영하면, 빅데이터 워크로드의 특성(스토리지, 실시간성, 비용 한도 등)에 맞추어 손쉽게 확장 가능한 분석 인프라를 구축할 수 있음.
각 노드의 역할 및 특성을 잘 이해하고, Autoscaling, 스팟 인스턴스, 데이터 보안 및 모니터링을 함께 적용하는 것이 전문가 수준의 안정적이고 효율적인 EMR 운영의 핵심임.
'Cloud > AWS' 카테고리의 다른 글
[AWS] EMR의 SPARK_DAEMON_JAVA_OPTS (0) | 2025.01.14 |
---|---|
[AWS] 파이썬으로 EMR 클러스터 생성 (0) | 2025.01.14 |
[AWS] EMR(Elastic MapReduce) 개념 (0) | 2025.01.14 |
[AWS] istio (0) | 2024.12.08 |
[AWS] EKS Add-on (0) | 2024.12.05 |