빅데이터의 정의
- 디지털 환경에서 발생하는 대량의 모든 데이터
- 기존 데이터베이스 관리도구의 데이터 수집, 저장, 관리, 분석 역량을 넘어서는 비정형 데이터
- 용량은 수십 TB에서부터 수십 PB까지도 존재할 수 있다. 즉, 기존 데이터베이스 시스템에서 처리할 수 없는 방대한 양의 데이터이다.
=> 조직은 내/외부에 존재하는 다양한 형태의 데이터를 수집하고 처리하고 분석해서 데이터에서 의미있는 가치를 추출해 조직에 전략적 의사결정에 활용하고, 비즈니스에 적용하는 행위를 한다.
= 빅데이터의 처리단계
: 수집 → 정제 → 적재 → 분석 → 시각화
하둡이란?
- 간단한 프로그래밍 모델을 사용하여 여러 대의 컴퓨터 클러스터에서 대규모 대용량 데이터를 분산 처리할 수 있는 빅데이터의 처리가 목표인 자바 기반의 오픈 소스 프레임워크
- HDFS(Hadoop Distributed File System)라는 데이터 저장소와 MapReduce라는 분석 시스템을 통해 분산 프로그래밍을 수행하는 프레임워크
- 분산처리(계산)와 분산저장
= 장점
- 오픈소스로 라이선스에 대한 비용 부담이 적음 (Open Source)
- 저렴한 구축 비용과 비용대비 빠른 데이터 처리 (Distributed)
- 가정용 PC로도 구축이 가능할 정도.
- 일부 장애 발생시에도 전체 시스템 영향도가 적음 (Fault-tolerant)
- 시스템을 중단하지 않고도 Scale Out(확장)이 쉽다 (Scalable)
= 단점
- HDFS에 한번 저장이 되면 데이터 변경이 불가 (파일 이동, 삭제, 복사로 수행)
- 실시간 데이터 분석에는 부적절할 수 있는 프레임워크
- 설정이 어렵다
- 데이터 무결성을 보장해야하는 데이터처리에는 부적합하다
= 특징
- 데이터 스키마를 정의할 필요 없음
- 데이터는 주로 줄 단위의 나누어진 텍스트 파일
- 원본 저장 -> 정보 필터링
- 대량의 데이터를 수많은 머신에서 분할 병렬 처리하는 데에 특화되어있음
- SQL(문법) 지원 프로젝트가 꾸준히 증가, 실시간 처리하는 분야가 발전중
HDFS(Hadoop Distributed File System) - 하둡 분산 파일 시스템
: 수십 TB 혹은 수십 PB까지의 대용량 파일을 분산된 서버에 저장하고, 그 저장된 데이터를 빠르게 처리할 수 있게 하는 파일시스템.
- 블록 구조의 파일 시스템
- 블록의 크기는 64MB (하둡 2.0부터는 128MB로 증가)
- 파일을 특정크기의 블록에 나누어 분산된 서버에 저장
- 파일은 블록에 나누어져 저장되며, 각 블록은 서로 다른 머신에 3개의 복사본을 유지
= NameNode(네임노드)와 DataNode(데이터노드)
- Hadoop 클러스터는 하나의 네임 노드(마스터)와 여러 개의 데이터 노드(슬레이브)로 구성.
- NameNode(네임노드)
- 파일 시스템을 유지하기 위한 메타데이터 관리 (파일의 체크섬 생성일 및 저장된 블록정보 등)
- 데이터 노드 모니터링
- 데이터노드는 3초마다 heartbeat를 네임노드로 전송하고, heartbeat를 받지 못한 데이터노드는 장애가 발생한 것으로 판단
- 데이터 블록 관리 (장애가 발생한 데이터 노드의 블록을 새로운 데이터 노드로 복사)
- DataNode(데이터노드)
- 파일을 블록 단위로 쪼개서 저장
- 블록들은 복제(Replication)를 통해 여러 개의 DataNode에 저장
- 신뢰성 보장 - 하나의 복제본이 손실되어도 아무런 결함 없이 사용될 수 있도록 함
- 데이터 지역성 향상 - 실행을 위해 데이터 이동 없이 블록이 저장된 곳에서 수행할 수 있도록 함
- HDFS의 Node 구조
맵리듀스(MapReduce)
: Hadoop의 기본 데이터 처리 방식.
- Map + Reduce 단계로 나뉘며, Hadoop의 계산을 담당
- 많은 양의 데이터를 나누어서 볼 수 있게 해준다
= Map
- Input 데이터를 가공하여 데이터를 연관성 있는 데이터로 분류하여 Key-Value로 묶어준다
= Reduce
- Map단계의 Key를 중심으로 필터 및 정렬한다
- 중복 데이터를 제거하고 원하는 데이터를 추출
- Map의 결과를 정렬하고 하나로 합쳐 Reduce Task를 만든다
- 사용자 정의 Reduce함수로 전달
- 결과물을 HDFS에 저장
1] Splitting: 문자열 데이터를 라인별로 나눈다.
2] Mapping: 라인별로 문자열을 입력받아 <Key, Value> 형태로 출력
3] Shuffling: 같은 Key를 가지는 데이터끼리 분류
4] Reducing: 각 Key별로 빈도수를 합산해서 출력
5] Final Result: Reduce 메소드의 출력 데이터를 합쳐서 HDFS에 저장
MapReduce Architecture
: MapReduce 시스템은 Client, JobTracker, TaskTracker로 구성된다.
- Client: 사용자가 실행한 MapReduce 프로그램과 Hadoop에서 제공하는 MapReduce API를 의미한다. (개발자가 코드를 정의)
- JobTracker: Client가 Hadoop으로 실행을 요청하는 MapReduce 프로그램은 Job이라는 하나의 작업 단위로 관리된다. Hadoop 클러스터에 등록된 전체 Job의 Scheduling을 관리하고 모니터링한다.
- TaskTracker: 사용자가 설정한 MapReduce 프로그램을 실행하며, Hadoop의 DataNode에서 실행되는 Demon
(JobTracker의 요청을 받고, JobTracker가 요청한 Map과 Reduce 개수만큼 Map Task와 Reduce Task를 생성)
'Hadoop' 카테고리의 다른 글
Hadoop - HDFS 명령어 (0) | 2021.09.13 |
---|---|
Hadoop - MapReduce 프로그래밍 (0) | 2021.09.13 |
Hadoop - ubuntu에 하둡 설치하기 (0) | 2021.09.13 |