Hadoop

💡 큰 데이터가 있다면 하나의 서버를 키우는것보다 더 많은 서버에서 이를 분담

검색 엔진 개발을 위해 시작된 프로젝트

기능을 위한 크롤링 데이터를 색인하는 시스템 → 수십억 웹 페이지, 1조개 링크에 대한 데이터 저장

테라바이트 크기 이상의 데이터를 더 빠르게 정렬할 수 있게 되었다

HDFS

💡 대용량 파일을 다룰 수 있도록 설계된 파일 시스템 하둡의 파일 시스템 추상화 개념에 대한 구현체 중 하나

클러스터 전체에서 매우 높은 총 대역폭을 제공한다.

설계 특성

  • 매우 큰(~MB, GB, TB, PB) 파일
  • 스트리밍 방식의 데이터 접근
    • 한 번 쓰고 여러번 읽는다
    • 데이터셋은 생성 or 원본으로부터 복사
  • 범용 하드웨어
    • 쉽게 구할 수 있는 하드웨어로 구성된 대형 클러스터에서 문제 없이 실행되도록 설계됨

HDFS 적합하지 않은 Case

  • 빠른 데이터 응답 시간 요구하는 애플리케이션
    • HDFS는 높은 데이터 처리량을 제공하기 위해 최적화되어 있고 이를 위해 응답 시간 희생하는 구조
  • 수많은 작은 파일
    • 네임노드는 파일시스템의 메타데이터를 메모리에서 관리하기 때문에 저장할 수 있는 파일 수 네임노드의 메모리 용량에 좌우됨
    • 파일 수가 많고 각 파일의 블록이 하나면 적지 않은 메모리가 필요하다.
  • 임의 수정
    • 파일에서 임의 위치에 있는 내용 수정하는 것은 불가능

개념

블록

블록크기란 한번에 읽고 쓸 수 있는 데이터의 최대량

  • 단일 디스크를 위한 파일시스템 블록
    • 디스크 블록 크기의 정배수인 파일시스템 블록 단위로 데이터를 다룬다.
    • 보통 파일시스템 블록 크기는 ~KB. 디스크 블록 크기는 기본적으로 512Byte.
    • 디스크 블록보다 작은 데이터라도 한 블록 전체를 점유한다.
  • HDFS 블록
    • 기본 128MB 큰 단위: 큰 이유는 탐색 비용을 최소화하기 위해서
    • 블록 크기보다 작은 데이터일 경우 크기만큼만 점유

블록 추상화 장점

  • 파일 하나의 크기가 단일 디스크 용량보다 더 커질 수 있다
  • 스토리지 서브 시스템 단순하게 만들 수 있다
    • 메타데이터는 블록과 함께 저장될 필요 없어 별도의 시스템에 분리할 수 있다
  • 복제 구현에 적합
    • 각 블록은 물리적으로 분리된 다수의 머신에 복제
    • 하나의 블록 고장나거나 이용할 수 없다면 다른 머신에 있는 복사본 읽도록 클라이언트에 전달

HDFS 클러스터는 마스터-워커 패턴으로 하나의 네임노드(마스터), 여러개의 데이터노드(워커)로 구성되어 있다.

네임노드

  • 파일시스템의 네임스페이스 관리. 장애복구 기능에 필수적
    • 네임스페이스란?
    • 동일한 시스템에서 별개의 독립된 공간을 격리된 환경에서 운영하는 가상화 기술

데이터노드

  • 클라이언트나 네임노드의 요청이 있을 때 블록을 저장하고 탐색
  • 저장하고 있는 블록의 목록을 주기적으로 네임노드에 보고한다

블록캐싱

  • 빈번하게 접근하는 블록 파일은 데이터 노드의 메모리(블록 캐시)에 명시적으로 캐싱할 수 있다
  • 잡 스케줄러(맵리듀스, 스파크 등)는 블록이 캐싱된 데이터노드에서 태스크가 실행되도록 할 수 있다.
  • 읽기 성능을 높일 수 있다.

YARN

Yet Another Resource negotiator - 하둡 클러스터 자원 관리 시스템 클러스터의 자원을 요청하고 사용하기 위한 API 제공

구조

  • 리소스 매니저
    • 클러스터에서 유일
    • 클러스터 전체 자원의 사용량 관리
  • 노드 매니저
    • 모든 머신에서 실행
    • 컨테이너를 구동하고 모니터링하는 역할

'DataEngineering' 카테고리의 다른 글

Spark tuning  (0) 2024.03.17
[Spark] Spark run in Cluster Mode-YARN  (1) 2024.02.04
[Airflow] Operators  (0) 2024.01.21
Airflow Concept  (0) 2023.12.24
MapReduce  (0) 2023.01.07