13주차 월요일, 61일차 Today I Learned
빅데이터 처리 시스템, Hadoop Spark (1)
: 빅데이터 처리와 Spark 소개
✏️ 학습 내용
1. 빅데이터 정의, 처리
빅데이터 정의 :
- 서버 한 대로 처리할 수 없는 규모의 데이터 >> 다수의 서버로 처리하여 분산 처리 환경이 필요함
- 2014년 4월 아마존 클라우드 컨퍼런스에서 아마존의 데이터 사이언티스트인 존 라우저가 내린 정의로, 분산 환경이 필요하느냐에 포커스됨
- 만약 판다스로 처리해야할 데이터가 너무 커서 처리가 불가능하다면 어떻게 할 것인가? (Pandas 대신 Spark 사용)
- 기존의 소프트웨어로는 처리할 수 없는 규모의 데이터
- 대표적인 기존 소프트웨어 오라클이나 MySQL과 같은 관계형 데이터베이스 (분산환경을 염두에 두지 않고, 스케일업 접근방식)
- 4V by 가트너 : Volume, Velocity, Variety, Varecity)
- 데이터의 크기가 대용량인지?
- 데이터의 처리 속도가 중요한지?
- 구조화/비구조화 데이터 둘 다 가능한지?
- 데이터의 품질이 좋은지?
빅데이터 예시 :
- 디바이스 데이터
- 웹
빅데이터 처리가 갖는 특징 (문제 -> 해결점) :
- 큰 데이터를 손실없이 보관할 방법 필요 -> 스토리지처럼 큰 데이터 저장이 가능한 분산 파일 시스템이 필요
- 처리 시간이 오래 걸림 -> 병렬 처리가 가능한 분산 컴퓨팅 시스템이 필요
- 비구조화된 데이터일 가능성이 높아 SQL만으로는 부족 (ex. 웹 로그 파일) -> 비구조화 데이터를 처리할 방법이 필요
따라서, 다수의 서버가 하나의 로지컬 서버처럼 행동하는 다수의 컴퓨터로 구성된 프레임웍이 필요하다.
대용량 분산 시스템 특징 :
- 분산 환경 기반 (1대 혹은 그 이상의 서버로 구성) : 분산 파일 시스템, 분산 컴퓨팅 시스템 필요
- Fault Tolerance : 소수의 서버가 고장나도 동작해야함
- 확장이 용이해야 함 : Scale Out이 되어야 함
2. 하둡, YARN, 맵리듀스
Hadoop은 기존 기술과는 전혀 다른 방식을 택함으로써 대용량 데이터 처리를 가능하게 해주었다. 이는 Doug Cutting이 구글랩 발표 논문들에 기반해 만든 오픈소스 프로젝트로, 1세대 분산 파일 시스템이라고 할 수 있다. 다수의 노드로 구성된 클러스터 시스템으로, 마치 하나의 거대한 컴퓨터처럼 동작하지만 사실은 다수의 컴퓨터들이 복잡한 소프트웨어로 통제된다.
- 2003, The Google File System
- 2004, MapReduce : Simplified Data Processing on Large Cluster
하둡의 발전 :
하둡 1.0은 HDFS 위에 MapReduce 라는 분산컴퓨팅 시스템이 도는 구조이다. 하둡 2.0에서 아키텍처가 크게 변경되어 YARN 이라는 이름의 분산처리 시스템 위에서 동작하는 애플리케이션이 되었다. (참고로 Spark는 YARN 위에서 애플리케이션 레이어로 실행된다.)
- Application Layer : MapReduce, Spark, Tez, ..
- Resource Management Layer : YARN (분산 컴퓨팅 시스템)
- Storage Layer : HDFS
하둡 3.0은 YARN 2.0을 사용한다. YARN 프로그램들의 논리적인 그룹(플로우)으로 나눠서 자원 관리가 가능하고, 이를 통해 데이터 수집 프로세스와 데이터 서빙 프로세스를 나눠서 관리할 수 있다. 또한 타임라인 서버(YARN에서 발생하는 이벤트를 기록하는 서버)에서 HBase를 기본 스토리지로 사용한다. 파일 시스템 측면의 변화점은 내임노드의 경우 다수의 스탠바이 내임노드를 지원한다는 것이고, HDFS, S3, Azure Storage 외에도 Azure Data Lake Storage 등을 지원한다.
HDFS (분산 파일 시스템)
데이터를 블록 단위로 나눠서 저장 (블록 크기는 디폴트 128MB)한다. 각 블록은 3군데에 중복 저장되어 데이터 유실을 최소화하고, Fault Tolerance를 보장할 수 있는 방식으로 이 블록들은 저장된다. 내임노드 이중화 (백업)도 지원한다.
MapReduce (분산 컴퓨팅 시스템)
하둡 1.0에서 사용되며, 하나의 잡 트래커 (마스터)와 다수의 태스크 트래커 (슬레이브)로 구성된다. HDFS와 동일한 구조로, 잡 트래커가 일을 나누어 다수의 태스크 트래커에게 분배하고, 태스크 트래커에서 병렬처리 된다. 마스터는 내임노드와 잡 트래커 2개를 각각 서버에 구성하는 것이 일반적이다. 또한 MapReduce만 지원하여 제너럴한 시스템은 아니다.
YARN의 동작 방식 :
YARN이란 세부 리소스 관리가 가능한 범용 컴퓨팅 프레임웍으로, Spark이 이 위에서 구현된다.
- 리소스 매니저 (Job Scheduler, Application Manager)
- 노드 매니저
- 컨테이너 (앱 마스터, 태스크)
1) 실행 코드와 환경 정보를 리소스 매니저에게 제출
2) 리소스 매니저가 노드 매니저를 통해 애플리케이션 마스터 실행
3) 애플리케이션 마스터가 리소스 매니저로 코드에 실행에 필요한 리소스(컨테이너들)를 받아옴
4) 애플리케이션 마스터가 노드 매니저를 통해 컨테이너들을 받아 코드 실행 (테스크)
5) 태스크들은 자신의 상황을 주기적으로 애플리케이션 마스터에게 업데이트 (heartbeat)
맵리듀스 프로그래밍 :
- 데이터 셋 : key, value의 집합, 변경 불가능 (Immutable)
- 데이터 조작 : map과 reduce 두 개의 오퍼레이션으로만 가능
- 맵리듀스 시스템이 Map의 결과를 Reduce 단으로 모아줌
map 이란 key-value 페어를 다른 페어의 리스트나 집합으로 만들어 주는 것, reduce 란 같은 출력을 모아서 새로운 key-value 페어로 만들어주는 것이다.
- Shuffling : Mapper의 출력을 Reducer로 보내주는 프로세스로, 전송되는 데이터의 크기가 크면 네트웍 병목을 초래하고 시간이 오래 걸린다.
- Sorting : 모든 Mapper의 출력을 Reducer가 받으면 이를 키별로 소팅한다.
- Data Skew : 각 태스크가 처리하는 데이터 크기에 존재하는 불균형 >> 병렬 처리의 큰 의미가 없고, 가장 느린 태스크가 전체 처리 속도를 결정하게 됨
맵리듀스 2가지 오퍼레이션만 지원하여 프로그래밍은 프로그래밍 모델이 가진 융통성이 부족하고, 튜닝/최적화가 쉽지 않아 낮은 생산성이란 특징을 보인다. 또한 배치작업 중심이어서 기본적으로 Low Latency가 아니라 Throughput에 초점이 맞춰져있다는 문제점이 존재한다. Shuffling 이후에 Data Skew가 발생하기 쉽다는 점도 문제이다. 그리고 모든 입출력이 디스크를 통해 이루어져서 큰 데이터 배치 프로세싱에 더 적합하다.
이에 대한 대안으로 더 범용적인 대용량 데이터 처리 프레임웍들이 등장했다 : YARN, Spark. SQL도 다시 널리 사용되게 되었다 : Hive, Presto.
3. Spark 소개, 프로그램 실행 옵션
2세대 빅데이터 기술 Spark는 버클리 대학의 AMPLab에서 아파치 오픈소스 프로젝트로 2013년에 시작되었다. YARN등을 분산 환경으로 사용하며, 이 외에도 다양한 분산 환경 위에서 동작한다. Spark 자체는 Scala로 작성되었으며, 빅데이터 처리 관련 다양한 기능을 제공한다.
하둡 (YARN) 이나 쿠버네틱스 위에 Spark Core Engine이 있고, 그 위에 Spark SQL, Spark ML, Spark Streaming, Spark GraphX 등이 돌아가는 구성이다.
- Spark 프로그래밍 API
- RDD (Resilient Distributed Dataset)
- DataFrame & Dataset
- Spark SQL : 데이터 프레임, 구조화된 데이터 처리를 SQL로 처리
- Spark ML : 머신러닝 관련 다양한 알고리즘, 유틸리티로 구성된 라이브러리
- Spark.mlib는 RDD 기반인데 더 이상 업데이트가 되지 않으므로 데이터 프레임 기반의 spark.ml을 사용할 것을 권장
- 원스톱 ML 프레임웍이자 대용량 데이터도 처리 가능
맵리듀스와의 차이점 :
- 디스크 기반 → 메모리 기반 (메모리가 부족해지면 디스크를 사용)
- 하둡(YARN) 위에서만 동작 → 이 외에 다른 분산 컴퓨팅 환경 지원
- key, value 기반 데이터 구조만 지원 → pandas df과 개념적으로 동일한 데이터 구조 지원
Spark은 다양한 방식의 컴퓨팅을 지원하여 (배치 데이터 처리, 스트림 데이터 처리, SQL, 머신러닝, 그래프 분석), 빅데이터 처리에 유용하게 쓸 수 있다.
Spark 데이터 시스템 사용 예시 :
기본적으로 대용량 데이터 배치 처리, 스트림 처리, 모델 빌딩이 가능하다.
- 대용량 비구조화된 데이터 처리 (ETL 혹은 ELT)
- ML 모델에 사용되는 대용량 피쳐 처리 (배치/스트림)
- Spark ML 이용하여 대용량 훈련 데이터 모델 학습
Spark 프로그램 실행 환경 :
- 개발/테스트/학습 환경 (Interactive Clients)
- 노트북 (주피터, 제플린)
- Spark Shell
- 프로덕션 환경 (Submit Job)
- Spark-submit (command-line utility)가 가장 많이 사용됨
- 데이터 브릭스 노트북
- REST API
Spark 프로그램의 구조 :
- Driver : 실행되는 코드의 마스터 역할 수행
- Executor : 실제 태스크를 실행해주는 역할 수행
💡 배운 점
- 빅데이터의 개념, 예시, 특징에 대해 살펴보았다.
- 빅데이터 처리를 위해 하둡이라는 오픈 소스가 등장함을 알게 되었다.
- 하둡은 분산 파일 시스템 (HDFS), 분산 컴퓨팅 시스템 (맵리듀스/YARN) 으로 구성되었다.
- 맵리듀스 프로그래밍의 제약성으로 인해 SQL이 재등장하고, YARN이 등장했다.
- Spark은 대세 대용량 데이터 분산 컴퓨팅 기술임을 알게 되었다.
- pandas + scikit learn의 스테로이드 버전이다.
- SQL과 스트림 데이터와 그래프 처리도 제공한다.
☁️ 소감
간략한 개요만 살펴보았다. 빅데이터 처리를 위해서 맨 처음에 하둡이라는 서비스가 등장했고, 이와 관련해서 맵리듀스나 YARN에 대해 배웠다. 그리고 이후 등장한 Spark이 있는데, 이는 빅데이터 처리에 종합 선물 세트와 같이 다양한 기능들을 제공한다.
'Data Engineering > grepp 데브코스 : TIL' 카테고리의 다른 글
[TIL_2024.01.17] 빅데이터 처리 시스템, Hadoop Spark (3) : Spark 프로그래밍 - SQL (1) | 2024.02.15 |
---|---|
[TIL_2024.01.16] 빅데이터 처리 시스템, Hadoop Spark (2) : Spark 프로그래밍 - DataFrame (0) | 2024.02.15 |
[TIL_2024.01.05] dot & 데이터 카탈로그 (1) | 2024.01.05 |
[TIL_2024.01.04] Airflow 운영과 대안 & dbt (1) | 2024.01.05 |
[TIL_2024.01.03] Airflow 고급기능 (3) : 기타 기능 - Dag Dependencies, Task Grouping, Dynamic Dags (0) | 2024.01.03 |