Spark & Hadoop/Hadoop

[Hadoop] 대용량 분산시스템 Hadoop과 MapReduce (Hadoop 1.0, Hadoop 2.0, Hadoop 3.0)

YSY^ 2023. 8. 9. 19:42

대용량 분산 시스템

  • 분산 환경 기반 (1대 혹은 그 이상의 서버로 구성)
    • 분산 파일 시스템과 분산 컴퓨팅 시스템이 필요
  • Fault Tolerance
    • 소수의 서버가 고장나도 동작해야함
  • 확장이 용이해야함
    • 즉, Scale Out이 되어야함

분산 처리 시스템

Hadoop(하둡)

  • Doug Cutting이 구글랩 발표 논문들에 기반해 만든 오픈소스 프로젝트
    • 2003년 The Google File System
    • 2004년 MapReduce: Simplified Data Processing on Large Cluster
  • 처음 시작은 Nutch라는 오픈소스 검색엔진의 하부 프로젝트
  • 하둡은 Doug Cutting의 아들의 코끼리 인형의 이름
  • 2006년에 아파치 톱레벨 별개 프로젝트로 떨어져나옴

하둡의 정의

  • An open source software platform for distributed storage and distributed processing of very large data sets on computer clusters built from commodity hardware
  • 즉, distributed storage (분산 파일 시스템인 HDFS)과 distributed processing(분산 컴퓨팅 시스템인 MapReduce)로 구성된 대용량의 데이터를 처리할 수 있는 시스템
  • 다수의 노드로 구성된 클러스터 시스템 (Cluster)
    • 하나의 거대한 컴퓨터처럼 동작
    • 실제로는 다수의 컴퓨터들이 복잡한 소프트웨어로 통제됨

하둡 1.0

  • 하둡 1.0은 HDFS위에서 MapReduce라는 분산컴퓨팅 시스템이 실행되는 구조
  • MapReduce 위에서 다양한 컴퓨팅 언어들이 만들어짐
    • Pig(피그), Hive(하이브), Presto(프레스토) 등

하둡 1.0의 구조

MapReduce(맵리듀스)

  • 하둡1.0에서 처음 소개된 분산컴퓨팅시스템
  • 다수의 TaskTracker와 하나의 JobTacker(마스터)로 구성
  • 실제 코드는 TaskTracker 에서 실행되지만 일을 나눠주는 역할은 JobTacker가함
  • 즉, JobTacker가 일을 나눠서 다수의 TaskTracker에게 분배하고 TaskTracker에서 병렬처리
  • 이 구조는 HDFS와 동일
  • 따라서 Slave 노드에 TaskTracker와 DataNode의 두가지 소프트웨어가 설치되어 있는것이 일반적임
    • 즉 데이터 파일 시스템, 처리시스템 역할 둘다 함
    • 마스터는 보통 여유가 된다면 별도의 서버로 구성 (JobTacker와 NameNode는 서버를 분리)
    • 맵리듀스만 지원하기에 제너럴한 시스템이 아니라서 하이브나, 프레스토 피그등을 사용하게 됨
    • 따라서 하둡 2.0부터 구조가 크게 달라짐

CF) MapReduce에 대하여 : https://ysyblog.tistory.com/347

 

[Hadoop] 맵리듀스(MapReduce) Programming

맵리듀스 프로그래밍 특징 큰 데이터를 처리할 수 있는데에 목표 데이터 셋의 포맷도 하나로 단순화하였고, 변경 불가 데이터 셋의 포멧은 Key, Value의 집합이며 변경 불가(immutable) 데이터 조작은

ysyblog.tistory.com

 

HDFS (분산 파일 시스템)

  • 블록단위 저장 : 데이터를 블록단위로 나눠 저장
    • 블록의 크기는 128 MB (디폴트)
  • 블록 복제 방식 (Replication)
    • 각 블록은 3 군데에 중복 저장됨
    • Fault tolerance를 보장할 수 있는 방식으로 이 블록들은 저장됨
  • 데이터 파일 시스템은 DataNode와 NameNode(Master Node)로 구성
    • DataNode  : 각 서버에 데이터가 저장
    • NameNode : 어떤 파일이 어떤 데이터노드에 있는지의 정보를 가지고 있음

HDFS의 구조 (출처 : https://www.oreilly.com/library/view/data-lake-for/9781787281349/5983829d-2c2c-4649-a92f-9e72f7a67f15.xhtml)

맵리듀스의 단점과 하둡 1.0의 문제

  • map과 reduce만 제공
  • 프로그래밍이 어려워서 생산성이 떨어짐
  • 따라서 데이터처리를 쉽게 하기 위해 사용하기 쉬운 형태의 프레임워크인 피그, 하이브, 프레스토 등이 만들어짐
  • Pig(피그) : 판다스 데이터프레임과 비슷하지만 문법이 직관적이지 않아서 더이상 잘 안쓰임
  • Hive(하이브), Presto(프레스토) : SQL과 같이 구조화하기 쉽게 만들어놓음
  • 이러한 맵리듀스의 한계로 맵리듀스의 생산성이 급감
  • 따라서 맵리듀스 대신에 조금더 일반적인 분산처리 시스템을 만드는 니즈가 생김

하둡 2.0

  • 아키텍쳐가 하둡1.0에 비해 많이 바뀜
  • HDFS2 : HDFS보다 신뢰성이나 견고성이 개선되지만 기본적인 포멧은 비슷
  • YARN : 분상 컴퓨팅 시스템 이름이며 Mapreduce 전에 구현됨.
  • 하둡은 YARN이란 이름의 분산처리 시스템위에서 동작하는 애플리케이션이 됨
    - 하이브 프레스토 등은 맵리듀스에서 바로 돌아갈 수 있고 yarn에서도 바로 돌아갈 수 있음
    - Spark은 YARN위에서 애플리케이션 레이어로 실행됨 (Yarn이 나오면서 만들어짐)

HDFS2의 Name Node 이중화 지원

  • 데이터 노드가 고장이 나면, 다른 데이터 노드에 저장된 같은 데이터 블록을 가져올수 있게 함
  • 데이터 노드가 다 살아있어도 네임노드가 동작을 안하면 다같이 눕게 됨
  • 따라서 네임노드 이중화가 중요
  • 1.0에서는 세컨더리 네임노드라는 것이 있었음 (네임노드의 내용을 주기적으로 복제)
  • 문제는 네임노드가 다운 되었을때 자동으로 세건더리가 메인노드를 대신하는것이 아닌, 사람이 직접 세건더리로 메인노드를 만들어야하는 작업을 해야함
  • 2.0에서는 변경 -> 네임노드를 이중화해서 Active & Standby 를 만듬
  • 액티브에 문제가 생기면 스텐바이 네임노드가 자동으로 네임노느 역할을 하게 함
    • 둘 사이에 share edit log가 존재
    • 여전히 세컨더리 네임노드도 존재

 

하둡 1.0과 하둡 2.0 차이점

https://bigdataanalyticsnews.com/hadoop-2-0-yarn-architecture/

하둡 3.0

  • YARN 2.0을 사용
  • YARN 프로그램들의 논리적인 그룹(플로우라고 부름)으로 나눠서 자원 관리가 가능.
    • 같은 플로우에 속한 Yarn Application들이 얼마나 자원을 쓰고 있는지 확인하고, 그 안에서 자원이 분배될 수 있도록 함
    • Yarn이 다용도로 사용될 때, 비슷한 목적을 가진 Application들이 리소스를 공유할 수 있게 함.
    • 이를 통해 데이터 수집 프로세스와 데이터 서빙 프로세스를 나눠서 관리 가능
  • 타임라인 서버에서 HBase를 기본 스토리지로 사용 (하둡 2.1)
    • 타임라인 서버 : Yarn에서 발생한 다양한 event를 기록
  • 파일 시스템
    • 내임노드의 경우 다수의 스탠바이 내임노드를 지원
      • 하둡 2.0은 한대의 스탠바이 내임노드만 지원했지만 3.0에서는 다수를 지원
    • HDFS, S3, Azure Storage 이외에도 Azure Data Lake Storage 등을 지원

 

위 포스팅은 [파이썬으로 해보는 Spark 프로그래밍 with 프로그래머스] 강의를 참고하여 정리하였습니다.

728x90
반응형