AWS EMR(Elastic MapReduce)
AWS에서 제공하는 빅데이터 처리 플랫폼
- Hadoop, Spark 같은 오픈소스 분산 데이터 처리 프레임워크를 AWS 클라우드에서 쉽게 사용할 수 있게 해주는 서비스(로그 분석, ETL, 기계학습 전처리 등을 해줌)
- 자동화: 클러스터 생성, 확장, 축소, 종료 등을 자동으로 처리
- S3, DynamoDB, RDS, Redshift, Data Catalog 등과 연동
여기서 MapReduce는 데이터를 분산해서 처리하는 방식을 말하는것
Map:데이터를 key-value 쌍으로 변환하는 것이고
Reduce: 같은 key에 대해 최종 집계 수행
Map | 데이터를 쪼개서 (key, value)로 변환 | ("hello", 1) |
Reduce | 같은 key를 합쳐서 집계 | ("hello", [1,1]) → 2 |
언제 사용하나
- 수 TB~PB 규모의 로그/데이터 처리를 빠르게 하고 싶을 때
- Spark, Hive, Presto 같은 빅데이터 도구를 쓰고 싶은데 인프라 설정은 하고 싶지 않을 때
- ETL 파이프라인을 자동화하고 싶을 때
- 머신러닝 학습 전에 대량의 데이터를 전처리해야 할 때
아키텍처 예시
- S3에서 원본 데이터 로딩(로딩)
- EMR 클러스터에서 Spark로 전처리(전처리)
- 결과를 S3/Redshift에 저장(저장)
- Athena/QuickSight/ML 모델로 분석(사용)
EMR 클러스터 구조
- Primary Node(기본 노드)
- 명령을 내림(단 하나가 돌아감 장애 주의)
- Core Node(코어 노드)
- 명령 수행 + 데이터 저장
- Task Node(작업 노드)
- 계산용
비슷한 서비스
- AWS Glue: 서버리스 ETL 서비스, 관리형, 코드 간단
- Athena: 쿼리만 가능, 처리는 느릴 수 있음
Spark, Hive 같은 빅데이터 도구를 사용하기 위한 인프라는 뭔데 이걸 자동화해준다는거?
AWS Glue이 더 추천되는 상황은?
- 간단한 ETL 또는 서버리스 환경이 필요한 경우
- S3 to S3m S3 to RDS 간 단순 변환
- 데이터 카탈로그 자동화, 크롤링이 필요한 경우
- 시작/중단이 잦은 간헐적 작업(비용 절약)
예: CSV → Parquet 변환, 자동화된 데이터 카탈로그, SQL 없이 GUI로 변환 처리
한 마디로 원시 데이터를 구조화된 데이터로 바꿔주는 역할
이렇게 전처리한 후 EMR로 한 번 더 전처리 하는 구조도 사용됨
Data Catalog (데이터 카탈로그)
S3, RDS, Redshift, DynamoDB 등 다양한 저장소에 있는 데이터를 “어디에 어떤 형식으로 어떤 스키마로 존재하는지” 정리해 둔 메타데이터 저장소
- 데이터 어디에 저장 됐는지
- 어떤 컬럼들이 있는지
- 컬럼의 타입은 뭔지
- 형식은 뭔지
- 파티션이 어떻게 돼 있는지
데이터의 데이터, 메타데이터가 저장되는 중앙 저장소
예)Glue에서 Data Catalog 자동화
CSV 파일만 덩그러니 있을 때 Glue Crawler가 실행되면 CSV의 스키마를 자동 추론함
그 후 Glue Data Catalog에 테이블 형태로 등록시켜줌
이렇게 구조화되었으면 다음 툴들이 분석하는게 훨씬 수월해짐
Hadoop
대용량 데이터를 분산 저장하고, 분산 처리할 수 있는 프레임워크
구성 요소 | 설명 |
HDFS (Hadoop Distributed File System) | 데이터를 여러 대의 서버에 분산 저장 |
MapReduce | 데이터를 분산 처리하는 방식 (처리 로직) |
YARN (Yet Another Resource Negotiator) | 자원 관리, 작업 스케줄링 담당 |
데이터를 분산 저장하고 가져와서 처리하는게 아닌 처리 로직인 MapReduce를 데이터 있는 곳으로 보냄
처리 속도는 빠르지 않지만, 안정성, 확장성이 매우 뛰어남
Spark
Hadoop보다 훨씬 빠른, 인메모리 기반의 분산 데이터 처리 프레임워크
핵심 개념
- In-Memory Computing: 데이터를 디스크가 아니라 메모리에서 처리해서 속도 빠름
- RDD(Resilient Distributed Dataset): 분산 데이터를 불변 객체로 안전하게 처리
- Lazy Evaluation: 실제 실행 시점까지 계산을 미룸 -> 최적화 가능
구성 요소
모듈 | 설명 |
Spark SQL | SQL처럼 쿼리 가능 |
Spark Streaming | 실시간 데이터 처리 |
MLlib | 머신러닝 알고리즘 내장 |
GraphX | 그래프 데이터 처리용 |
인메모리 방식 특성 상 다운 시 데미지가 큼
변경하는 과정에서 다운되면 데이터가 꼬임
그렇기에 데이터를 불변으로 만듦(RDD)
그 후 변경 이력만 따로 저장하는 것
장애로 날라가도 불변 객체 가져와서 변경 이력으로 하던거 다시할 수 있음