빅데이터의 정의와 예
빅데이터란.
: 서버 한대로 처리할 수 없는 규모의 데이터, 기존의 소프트웨어로는 처리가 불가능한 규모의 데이터.
- 4V
- Volume: 크기가 대용량
- Velocity: 처리 속도의 중요성
- Variety: 구조화/비구조화 데이터 모두
- Veracity: 데이터의 품질
빅데이터의 특징
- 빅 데이터의 문제들
- 빅데이터를 손실없이 보관할 방법이 필요 → 분산 파일 시스템의 필요성
- 처리 시간이 매우 오래걸림 → 분산 컴퓨팅 시스템이 필요
- 비구조화된 데이터일 가능성이 높음. → 비구조화 데이터의 처리
- 해결 방안: 다수의 컴퓨터로된 프레임워크가 필요하다.
- 대용량 분산시스템
- 분산 환경 기반: 다수의 서버로 구성이 되어야한다.
- Fault Tolerance: 소수의 서버가 고장나도 동작해야한다.
- 확장이 용이해야한다.(Scale Out)
하둡
하둡의 등장
- Doug Cutting이 구글랩 발표 논문들에 기반해 만든 오픈소스 프로젝트
- 첫 시작은 Nutch라는 오픈소스 검색엔진의 하부 프로젝트였다.
하둡이란?
- 다수 노드로 구성된 클러스터 시스템
- 하나의 거대한 컴퓨터처럼 동작하나 다수의 컴퓨터들이 복잡한 소프트웨어로 통제되는 것.
하둡의 발전
- 1.0: HDFS위에 MapReduce라는 분산컴퓨팅 시스템이 돌아가는 구조.
- 2.0: YARN이라는 이름의 분산처리 시스템 위에서 동작하는 애플리케이션으로 변경됨.
- 3.0
- YARN 프로그램들의 논리적인 그룹으로 나누어 자원 관리가 가능 → 다용도 사용 시 리소스의 적절한 배분이 가능
- 타임라인 서버에서 HBase를 기본 스토리지로 사용
- 파일 시스템: 네임노드의 경우 다수의 스탠바이 네임노드를 지원한다.
HDFS - 분산 파일 시스템
- 데이터를 블록 단위로 나누어 저장한다. (default: 128MB)
- 블록 복제 방식
- 각 블록은 3군데에 중복되어 저장된다. → Fault tolerance를 보장가능한 방식
- 네임노드 이중화 지원
- Active & Standby
- 둘 사이에 share efit log가 존재한다.
- Active & Standby
MapReduce: 분산 컴퓨팅 시스템
- 하나의 잡 트래커와 다수의 태스크 트래커로 구성된다.
- 잡 트래커가 일을 분배하나, 태스크 트래커에서 병렬로 처리한다.
- mapreduce만 지원한다.
YARN의 동작 방식
YARN의 구성
- 리소스 매니저
- Job Scheduler, Application Manager
- 노드 매니저
- 컨테이너
- 앱 마스터
- 태스크
YARN의 동작 방식
- 실행 코드와 환경 정보를 Resource Manager에게 제출
- 실행에 필요한 파일들은 application ID에 해당하는 HDFS 폴더에 미리 복사된다.
- Resource Manager는 Node Manager를 통해서이를 실행하기위한 Master를 생성한다. (Application Master)
- Application Master는 프로그램마다 하나씩 할당되는 프로그램 마스터이다.
- Application Master는 Resource Manager를 통해 코드 실행에 필요한 리소스를 받아온다.
- Resource Manager는 적절하게 리소스ㅌ를 할당해줌
- Application Master는 Node Manager를 통해서 컨테이너들을 받아 코드를 실행한다. (Task)
- 실행에 필요한 파일들은 HDFS에서 Container가 있는 서버로 먼저 복사된다.
- task들은 주기적으로 자신의 상황을 Application Master에게 업데이트한다.(heartbeat)
- YARN Application마다 하나의 Application Master가 생긴다.
맵리듀스
맵리듀스 프로그래밍의 특징
- 데이터 셋은 key, value의 집합이며 변경이 불가능하다.
- 데이터 조작은 map과 reduce 오퍼레이션으로만 가능하다.
- 두 오퍼레이션은 항상 하나의 쌍으로 연속으로 실행된다.
- Map의 결과를 Reduce로 모아준다. 이 때 네트워크를 이용한 데이터 이동이 생긴다. (셔플링)
맵과 리듀스
- Map: (k,v) → [(k’,v’)*]
- 입력은 시스템에 의해서 주어지며, 입력으로 지정된 HDFS 파일에서 넘어온다.
- key, value 페어를 새로운 key, value 페어 리스트로 변환한다.
- 출력은 입력값일 수 있으나, 값이 없어도 된다.
- 예시) input: (100,”I Am Groot”) → output: [(”I”,1),(”AM”,1)(”Groot”,1)]
- Reduce: (k’, [v1,v2,v3,…]) → (k’’,v’’)
- 입력은 시스템에 의해서 주어진다.
- 맵의 출력 중 같은 키를 갖는 key/value를 시스템이 묶어 입력으로 넣어준다.
- SQL의 Group by와 비슷하다.
- 출력은 HDFS에 저장된다.
- 하나의 리듀스에 너무 많은 데이터가 몰리는 경향이 존재한다.(주의)
- 예시) input: (”Groot”: [1,1,1]) → output: (”Grout”: 3)
- 입력은 시스템에 의해서 주어진다.
- 문제점
- 데이터 모델과 오퍼레이션에 제약이 많아 생산성이 떨어진다.
- 모든 입출력이 디스크를 통해서 이루어진다. → 배치 프로세싱에 적합한다.
- Shuffling 이후에 Data Skew가 발생하기 쉽다.
- Reduce 태스크 수를 개발자가 정해야하는 문제가 있다.
Shuffling & Sorting
- Shuffling
- mapper의 출력을 reducer로 보내주는 프로세스를 말한다.
- 전송되는 데이터의 크기가 크면 네트웤 병목을 초래한다.
- Sorting
- 모든 Mapper의 출력을 Reducer가 받으면 이를 키별로 정렬한다.
Data Skew
: 각 태스크가 처리하는 데이터의 크기에 불균형이 존재하는 경우에 병렬 처리가 의미가 없어지는 현상
- 가장 느린 태스크가 전체 처리 속도를 결정한다.
'Data Engineering' 카테고리의 다른 글
DE > 견고한 데이터 엔지니어링 - 4 (0) | 2024.06.13 |
---|---|
DE > Spark란? (0) | 2024.06.12 |
DE > 데이터 정합성 (0) | 2024.06.12 |
DE > 견고한 데이터 엔지니어링 - 3 (0) | 2024.06.11 |
DE > 견고한 데이터 엔지니어링 - 2 (0) | 2024.06.09 |