EMR
Amazon EMR(Amazon Elastic MapReduce)는 AWS(Amazon Web Services) 상에서 대규모 데이터를 신속하고 경제적으로 처리하기 위한 분산 처리 플랫폼임.
Apache Hadoop, Spark, Hive, HBase 등 다양한 오픈 소스 분석 엔진과 서비스를 실행할 수 있도록 관리형 클러스터를 제공하므로, 빅데이터 워크로드를 안정적으로 운영하고 민첩하게 확장할 수 있는 것이 특징임.
핵심 개념 및 아키텍처 : AWS EMR의 구성 요소
1. 클러스터(Cluster)
AWS EMR에서는 “클러스터”라는 단위로 데이터 처리를 수행함.
클러스터는 하나의 마스터 노드(Master Node), 0개 이상의 코어 노드(Core Node), 0개 이상의 태스크 노드(Task Node)로 구성됨.
A. 마스터 노드(Master Node)
클러스터의 제어 역할을 담당하며, Hadoop NameNode, ResourceManager, Hive Server, Spark Master 등 다양한 마스터 프로세스를 구동하고 모니터링함.
B. 코어 노드(Core Node)
데이터 노드를 포함하여 HDFS(Hadoop Distributed File System)의 영구 스토리지를 구성하고, 일반적인 데이터 처리 작업을 수행함.
코어 노드는 클러스터 생성 시 반드시 하나 이상 포함되어야 하며, 클러스터를 중단 없이 확장하거나 축소할 수도 있음.
단, 코어 노드는 축소 시에는 주의 필요함.
C. 태스크 노드(Task Node)
HDFS 저장소는 포함하지 않으며, 오직 작업(Task) 처리만 담당함.
코어 노드와 달리 자유롭게 확장·축소가 가능하여 비용 효율적인 스팟 인스턴스 활용에 주로 쓰임.
2. EMR Release Version
AWS EMR은 특정 버전의 릴리스(EMR Release Version)를 통해 Hadoop, Spark, Hive, Presto 등의 오픈소스 소프트웨어 스택 버전을 패키징하여 제공함.
릴리스 버전에 따라 Hadoop/Spark/Hive/Presto 등의 버전이 달라지므로, 원하는 기능이나 호환성을 위해 릴리스 버전을 신중히 선택해야 함.
배포판 수준에서 AWS 최적화가 이루어져 있어, 기본 Apache 배포판 대비 성능/안정성 개선이 적용되어 있음.
핵심 개념 및 아키텍처 : AWS 서비스와의 통합
1. Amazon S3
EMR에서 기본 스토리지로 Amazon S3를 활용하는 S3DistCp, EMRFS(EMR File System) 등을 지원함.
데이터를 로컬 HDFS에 저장할 수도 있지만, S3를 활용하면 탄력적인 스토리지 관리가 가능하고 클러스터 중지 시에도 데이터를 안전하게 보관할 수 있음.
2. AWS Glue
메타데이터 카탈로그(테이블 정의, 스키마 등)를 중앙에서 관리할 수 있으며, EMR의 Hive, Spark SQL이 Glue Data Catalog와 쉽게 통합되어 사용이 편리함.
3. Amazon VPC (Virtual Private Cloud)
클러스터 노드를 프라이빗 서브넷에 배치할 수 있으며, VPN 혹은 Direct Connect 등을 통해 온프레미스 데이터와 안전한 방식으로 연동 가능함.
4. Amazon EC2
EMR 클러스터의 노드는 기본적으로 EC2 인스턴스로 구성됨.
온디맨드, 예약 인스턴스, 스팟 인스턴스 등 EC2 인스턴스 요금 모델을 선택하여 비용을 최적화할 수 있음.
5. Auto Scaling
EMR 자체적으로도 오토 스케일링 규칙을 사용해 클러스터 자원을 자동 확장·축소할 수 있음.
주요 컴포넌트 및 기능 : Hadoop Ecosystem
EMR은 Apache Hadoop 에코시스템을 완벽하게 지원함.
Hadoop MapReduce, YARN, HDFS를 통해 분산 환경에서 대규모 데이터 처리가 가능함.
1. MapReduce
대규모 데이터 세트를 맵(Map) 단계와 리듀스(Reduce) 단계로 나누어 병렬 처리함.
Spark가 널리 사용되는 추세지만, 기존 Hadoop 기반 워크로드의 호환성과 안정성을 위해 여전히 활용되는 경우가 많음.
2. YARN
리소스 매니저로, 클러스터 전체에서 애플리케이션 자원을 할당하고 스케줄링함.
3. HDFS
Hadoop 생태계의 분산 파일시스템으로, 대규모 데이터를 분산 저장하고 고가용성을 보장함.
주요 컴포넌트 및 기능 : Apache Spark on EMR
Spark는 메모리 중심의 분산 데이터 처리 엔진으로, 맵리듀스 대비 월등한 속도와 다양한 API(Python, Scala, Java, R 등)를 제공함.
1. Spark Core
Spark의 기본 분산 실행 엔진임.
RDD(Resilient Distributed Dataset)를 통해 안정적이고 신뢰성 있는 데이터 처리를 가능하게 함.
2. Spark SQL
구조화된 데이터를 SQL 쿼리를 통해 처리할 수 있으며, DataFrame/Dataset 같은 고수준 API도 제공함.
3. Spark Streaming / Structured Streaming
실시간 스트리밍 데이터 처리 프레임워크임.
4. MLlib
회귀, 분류, 클러스터링 등의 알고리즘을 제공하는 머신 러닝 라이브러리임.
5. GraphX
그래프 처리를 위한 라이브러리임.
AWS EMR은 Spark에 대한 다양한 최적화(예: 동적 리소스 할당, 스팟 인스턴스 활용, EMRFS 최적화)와 함께 Spark UI, Yarn UI, Ganglia 등 모니터링 도구를 지원함.
주요 컴포넌트 및 기능 : Hive & Tez
Hive는 데이터 웨어하우스 기술로, SQL과 유사한 HiveQL로 대규모 데이터를 질의·분석할 수 있도록 해줌.
1. Hive on Tez
기존 맵리듀스 대신 Tez 엔진을 활용해 빠른 Hive 쿼리 성능을 제공함.
2. Hive Metastore
테이블 스키마 및 메타데이터를 관리하며, AWS Glue Data Catalog와 연동이 가능함.
주요 컴포넌트 및 기능 : Presto / Trino
분산 SQL 쿼리 엔진으로, 대화형 쿼리와 빠른 응답 시간을 제공하기 때문에 많은 기업에서 애드혹(Ad-hoc) 분석용으로 활용함.
1. 메모리 기반 연산
Presto/Trino는 모든 데이터를 메모리에서 처리하여 지연 시간을 줄임.
2. 다양한 커넥터
S3, HDFS, Cassandra, MySQL 등 다양한 데이터 소스에 동시에 질의할 수 있음.
주요 컴포넌트 및 기능 : HBase
HDFS 기반의 NoSQL 데이터베이스로, 실시간 읽기·쓰기를 지원함.
비정형 또는 준정형 데이터를 대용량으로 관리하고, 빠른 랜덤 접근 성능이 필요한 시스템에서 유용함.
주요 컴포넌트 및 기능 : EMR Notebooks & Zeppelin
1. EMR Notebooks
Jupyter 노트북 환경을 EMR과 통합해, PySpark, Spark SQL 등의 실행 결과를 시각적으로 확인하고 공유할 수 있음.
2. Apache Zeppelin
Apache Zeppelin도 선택적으로 EMR 클러스터 위에서 실행 가능함.
클러스터 운영 및 아키텍처 전략 : 클러스터 생성 패턴
1. 장기 실행(Long-running) 클러스터
반복적으로 실행되는 ETL, BI, 스트리밍 처리를 위해 클러스터를 상시 유지하는 방식.
오토 스케일링으로 코어 노드/태스크 노드를 조절하여 비용과 성능을 균형 있게 관리할 수 있음.
스팟 인스턴스를 적절히 섞어 비용 절감 가능.
2. 단기 실행(Transient) 클러스터
주기성 배치 작업이나 임시 분석 작업 등 한 번에 완료될 ETL 작업을 위해 일시적으로 클러스터를 생성하고, 작업이 끝나면 클러스터를 종료함.
S3를 외부 스토리지로 활용하기 때문에, 클러스터가 사라져도 데이터 유실 걱정이 없음.
작업 시간에 비례해 비용이 청구되므로, 유연한 스케줄링(예: AWS Step Functions, Airflow 등)으로 운영 가능.
클러스터 운영 및 아키텍처 전략 : 오토 스케일링
1. 수동 스케일링(manual scaling)
사용자가 직접 코어 노드나 태스크 노드를 늘리거나 줄이는 방식.
2. 정책 기반 스케일링(policy-based scaling)
CPU 사용량, YARN 메모리 사용량 등 특정 지표에 따라 노드를 자동으로 증감시키는 방식.
3. 스팟 인스턴스
태스크 노드에 스팟 인스턴스를 적용해 비용을 크게 줄일 수 있음.
단, 스팟 인스턴스가 회수될 가능성에 대비한 내결함성 설계 필요.
클러스터 운영 및 아키텍처 전략 : 네트워킹 및 보안
1. VPC 배포
사설 IP만 사용하여 외부와 격리된 환경에서 EMR 클러스터를 구동할 수 있음.
2. IAM 역할/정책
EMR, EC2, S3 간 권한 관리, 작업별 세분화된 권한 적용이 중요.
3. 암호화
At-rest(S3 SSE-KMS, HDFS 암호화) 및 In-transit(TLS)을 통해 전송 및 저장 데이터 보호 가능.
4. Kerberos
Hadoop 생태계에서 Kerberos 인증을 통해 보안을 강화할 수 있음.
클러스터 운영 및 아키텍처 전략 : 모니터링 및 로깅
1. Amazon CloudWatch
클러스터의 CPU, 메모리, 디스크, 네트워크, YARN 큐 사용률 등의 지표를 모니터링할 수 있음.
2. Ganglia / Spark UI / YARN ResourceManager UI
분석 작업 수준의 상세 로그와 메트릭 제공.
3. AWS CloudTrail
API 호출 추적을 통한 보안 감사에 활용.
비용 관리 및 최적화 : 클러스터 크기 조절
원하는 용량만큼만 노드를 할당하고, 필요에 따라 스케일링 정책을 이용해 증감하여 비용 최적화.
EMR은 초 단위 과금(최소 1분 단위)으로, 불필요할 시 과감히 클러스터를 종료(Transient 클러스터 활용).
비용 관리 및 최적화 : 인스턴스 선택
1. 온디맨드 인스턴스
유연하지만 단가가 비쌈.
2. 예약 인스턴스(RI)
장기 이용을 가정하면, 1년 혹은 3년 예약 구매를 통해 비용 절감.
3. 스팟 인스턴스
수요에 따라 가격이 변동되는 모델로, 특히 태스크 노드에 활용해 큰 비용 절감 효과를 볼 수 있음.
작업 중단 복구 전략 필요.
비용 관리 및 최적화 : EMR 요금
EMR 요금은 EC2 인스턴스 비용 + EMR 관리 비용(노드당 시간 단위 청구)으로 구성됨.
S3, Glue, CloudWatch 등의 다른 서비스 비용은 별도 청구됨.
비용 관리 및 최적화 : 작업 최적화
1. 데이터 압축 & 파티셔닝
S3에서 컬럼형 포맷(Parquet, ORC) 및 적절한 파티셔닝을 활용해 I/O 비용 절감.
2. Spark 캐시 전략
RDD 캐싱, DataFrame 캐싱 전략을 적절히 사용하여 중복 연산을 줄이고 성능 향상을 도모.
3. 스팟 용량 최적화
작업 특성(재시작 가능한지 등)을 고려해 스팟 인스턴스 비중을 높이되, 중단 시 자동 복구 전략 마련.
사례
1. 데이터 레이크 아키텍처의 중심
EMR을 사용하여 원본 데이터(S3/HDFS)에서 정제, 변환(ETL) 후, 분석용 테이블을 Glue Data Catalog에 등록하여 Athena, Redshift Spectrum 등과 연동하는 환경을 구성.
한 시스템 내에서 배치 처리(Hadoop/Spark), 대화형 쿼리(Presto/Trino), 실시간 스트리밍(Spark Streaming)까지 폭넓게 사용 가능.
2. EMRFS Consistent View
EMRFS를 사용해 S3에 접근할 때, eventually consistent한 특성을 극복하기 위해 Consistent View 옵션을 사용할 수도 있음.
단, 메타데이터를 DynamoDB에 저장하므로 비용과 관리 오버헤드가 증가.
3. 어드민 권장 설정
Spark Dynamic Allocation: YARN 클러스터 리소스 사용량에 맞춰 자동으로 Spark Executor를 조절하여 자원을 효율적으로 활용.
스팟 인스턴스 시 Failover 전략: 작업이 중단될 경우 자동으로 다른 스팟 풀 혹은 온디맨드로 대체해 작업 연속성을 보장.
4. 보안
S3 버킷 정책과 IAM 역할을 세분화해 필요 최소한의 권한만 부여.
Kerberos, AWS KMS를 조합해 데이터 암호화 정책 적용.
정리
Amazon EMR은 AWS 클라우드 상에서 빅데이터 분석을 수행하는 데 있어 매우 강력하고 유연한 솔루션임.
Hadoop과 Spark, Hive 등 오픈소스 분석 도구를 관리형으로 제공하며, EC2, S3, Glue 등 AWS 서비스와의 뛰어난 통합성을 통해 데이터 처리 아키텍처의 복잡성을 낮추고 운영 부담을 크게 줄일 수 있음.
전문적인 활용을 위해서는 다음과 같은 점을 계속 고려해야 함.
1. 클러스터 구성(마스터/코어/태스크 노드)과 릴리스 버전 선택
2. Auto Scaling, 스팟 인스턴스, 예약 인스턴스 등의 다양한 요금 전략을 통한 비용 최적화
3. 보안 모델(VPC, IAM, Kerberos, KMS 등) 설계
4. 데이터 파티셔닝, 파일 포맷, 캐싱, 모니터링 및 로깅 전략 등 성능 및 운영 최적화
이러한 요소들을 종합적으로 잘 설계하고 운영한다면, Amazon EMR을 통해 탄력적인 빅데이터 환경을 구축하고 효과적으로 대규모 데이터를 분석해낼 수 있음.
'Cloud > AWS' 카테고리의 다른 글
[AWS] 파이썬으로 EMR 클러스터 생성 (0) | 2025.01.14 |
---|---|
[AWS] EMR의 유형별 노드 (0) | 2025.01.14 |
[AWS] istio (0) | 2024.12.08 |
[AWS] EKS Add-on (0) | 2024.12.05 |
[AWS] EKS와 Secrets Manager 통합 (0) | 2024.12.05 |