본문 바로가기

Hadoop

Hadoop - 하둡이란??

빅데이터의 정의

  • 디지털 환경에서 발생하는 대량의 모든 데이터
  • 기존 데이터베이스 관리도구의 데이터 수집, 저장, 관리, 분석 역량을 넘어서는 비정형 데이터
  • 용량은 수십 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