HomeAbout
[Data Engineering] Hadoop HDFS와 MapReduce의 핵심 개념: 데이터 읽기와 쓰기 작업
Data Engineering
[Data Engineering] Hadoop HDFS와 MapReduce의 핵심 개념: 데이터 읽기와 쓰기 작업
NASA1515
NASA1515
August 12, 2021
3 min

목차

01
✌ Hadoop EcoSystem Core 구성 요소
02
HDFS (Hadoop Distributed File System)
03
MapReduce

✌ Hadoop EcoSystem Core 구성 요소

  • Hadoop EcoSystem에는 여러 구성 요소가 있지만, HDFS와 MR(MapReduce)는 Core Ecosystem으로 불립니다.


HDFS (Hadoop Distributed File System)

  • HDFS는 Hadoop Framework을 위해 JAVA로 작성된 분산 확장 파일 시스템입니다.
    HDFS는 대용량 파일을 여러 서버에 나누고, 중복 저장함으로써 Data의 안정성을 높힙니다.

특징

  1. HDFS는 다수의 노드에 복제 DATA도 함께 저장해 DATA 유실을 방지합니다.
  2. HDFS에 저장된 파일을 조회하려면 스트리밍 방식으로 DATA에 접근해야합니다
  3. 한번 저장한 DATA는 수정할 수 없고, 읽기만 가능해서 DATA 무결성을 유지합니다.
  4. DATA 수정은 불가능하지만 파일 이동, 삭제, 복사할 수 있는 인터페이스를 제공합니다.

Architecture

222211312

  • HDFS는 마스터/슬레이브(master/slave)구조를 가집니다.

HDFS의 특징

  1. Block 구조의 FileSystem, 저장파일은 특정 사이즈의 Block으로 나눠져 분산된 서버에 저장됩니다.
  2. 하나의 Block은 3개(수정 가능)로 복제되며, 각각 다른 HDFS의 DataNode에 분산저장됩니다.
  3. HDFS에는 NameNode 서버 한 대, Slave 역할을 하는 DataNode 서버가 여러 대로 구성됩니다.
  4. NameNode는 HDFS의 모든 Metadata(블록들이 저장되는 디렉토리, 파일 명..)를 관리하고 Client가 이를 이용하여 HDFS에 저장된 파일에 접근할 수 있습니다.
  5. Hadoop Application은 HDFS에 파일을 저장하거나, 저장된 파일을 읽기 위해 HDFS Client를 사용하며 API형태로 사용자에게 제공됩니다.
  6. DataNode는 주기적으로 HeartBeat 전송합니다, 이를 통해 NameNode는 DataNode가 정상 동작하는지 확인합니다.
  7. Clients는 NameNode에 접속해서 원하는 파일이 저장된 블록의 위치를 확인하고, 해당 Block이 저장된 DataNode에서 직접 DATA를 조회합니다.

HDFS File Write Flow

  1. APP이 Client에게 파일 저장을 요청합니다.
  2. Client는 NameNode에게 Block이 저장될 경로 생성을 요청합니다.
  3. NameNode는 해당 경로가 존재하지 않으면 생성한 뒤
  4. NameNode는 그 경로에 수정하지 못하게 LOCKING을 걸어둡니다.
  5. 그 후 Client에게 Block을 저장할 DataNode 목록을 반환하고
  6. Client는 첫번째 DataNode에 Data Block을 전송합니다
  7. 첫번째 DataNode는 Local에 저장한 뒤 두번째 DataNode로 전송합니다
  8. 두번째 DataNode는 동일하게 저장한 뒤 세번째로 전송합니다
  9. 세번째 DataNode부터 Local에 저장완료 후 넘겨준 DataNode에게 완료 Return을 줍니다
  10. 최종적으로는 첫번째 DataNode가 Client에게 저장완료를 Return하고 종료됩니다.

HDFS File Read Flow

64982211

  1. APP이 Client에게 파일 읽기를 요청합니다.
  2. Client는 NameNode에게 파일이 어느 DataNode의 어떤 블록에 저장되어 있는지 정보를 요청합니다.
  3. MetaData를 통해 파일이 저장된 블록 리스트를 Client에게 반환합니다.
  4. Client는 해당 DataNode에 접근해 Block 조회 요청합니다.
  5. DataNode는 Client에게 요청된 Block을 전송합니다.
  6. Client는 App에 DATA를 전달합니다.


MapReduce

대용량의 DATA 처리를 위한 분산 프로그래밍 Model, 소프트웨어 FrameWork라고 불립니다.
분산 컴퓨팅 환경에서 MapReduce를 이용해 대량의 DATA를 병렬로 분석이 가능하고 직접 작성하는 Map과 Reduce 라는 두 개의 메소드로 구성됩니다.
MapReduce는 Hadoop Cluster의 DATA를 처리하기 위한 시스템으로, Map , Reduce의 phase로 구성되며, Map과 Reduce사이에는 Shuffle과 Sort라는 스테이지가 존재합니다. 각 Map Task는 전체 DATA 세트에 대한 별개의 부분에 대한 작업을 수행하게 되는데 기본적으로 하나의 HDFS Block을 대상으로 수행하게 됩니다.
모든 Map Task가 종료되면 MapReduce 시스템은 intermediate DATA를 Reduce phase를 수행할 노드로 분산하여 전송합니다.


MAP & REDUCE

똑똑한 1명이 다량의 일을 처리하는 것 평범한 100명이 다량의 일을 처리하는 것, 단순하게 놓고 보자면 100명 진행하는 것이 훨씬 더 빠를 것입니다.
위에 간단하게 들어본 예가 분산처리의 핵심이지만, 100명 각각의 결과를 취합하고 정리하는 시간의 소모도 작지는 않습니다. 또한 탐색할 DATA가 비정형이라서 갯수가 101개라거나, 길이가 서로 다르다거나 하면 이를 동일한 업무크기로 나누는 일도 쉽지않습니다. MapReduce는 이러한 처리를 도와주는 역할을 합니다.


분산형 파일시스템에서는?

① MapReduce 작업이 끝나면 HDFS에 파일이 써지고(write)
② MapReduce 작업이 시작될 때는 HDFS로 부터 파일을 가져오는(Read) 작업이 수행됩니다.

MapReduce는 명칭 그대로 Map단계 & Reduce단계로 이루어집니다.



MAP


111111

  • 위의 그림처럼 흩어져 있는 분산 Cluster에서 각각의 DATA를 (key, value의 형태)로 분류합니다.
  • MapReduce의 Job의 입력 크기를 Split이라고 합니다
    -> 각 Split마다 하나의 Map Task를 생성하게되고
    -> 만들어진 Map Task는 스플릿의 레코드를 Map 함수로 처리되며
    -> (key, value) 구조를 가지는 중간 산출물이 생성됩니다.

Reduce


11123323


위의 그림은 문자열 DATA를 포함된 단어의 빈도 별로 나눠 출력해주는 Reduce 과정입니다. MapReduce는 다음과 같은 과정으로 DATA를 다룹니다.

  • Splitting : 문자열 DATA를 라인별로 나누는 과정입니다.
  • Mapping : 라인별로 문자열을 입력 -> (key, value) 형태로 출력합니다.
  • Shuffling : 같은 key를 가지는 DATA끼리 분류합니다.
  • Reducing : 각 key 별로 빈도수를 합산해서 출력합니다.
  • Final Result : 리듀스 메소드의 출력 DATA를 합쳐서 Hadoop 파일시스템에 저장합니다.

간단하게 Map, Reduce 영역을 분리한 그림

33333



MapReduce Jop

Job은 ‘Full Program’ 즉, 전체 프로그램을 의미합니다.
DATA 집합을 통해 Mapper와 Reducer를 전체 실행하고 Task는 DATA Block을 통해 하나의 Mapper 또는 Reducer를 실행하게 됩니다.
Client는 수행하려는 작업단위이고, INPUT DATA, MR Program, 설정 정보로 구성되어 있습니다.
Hadoop은 Job을 Map Task와 Reduce Task로 작업을 나누어서 실행하고, Job이 실행되는 과정을 제어 해주는 노드에 전달합니다.


MapReduce 시스템 구성

image44444


MapReduce System은 Client, JobTracker, TaskTracker로 구성됩니다.

  • JobTracker 는 NameNode(Master)에 위치합니다.
  • TaskTracker 는 DataNode(Slave)에 위치합니다.

Client

  • 분석하고자 하는 DATA를 Job의 형태로 JobTracker에게 전달합니다.

JobTracker

  • NameNode에 위치
  • Hadoop Cluster의 전체 Job들을 스케줄링하고 모니터링

MR Job들은 JobTracker라는 Daemon에 의해 제어됩니다. JobTracker들은 다음과 같은 역할을 수행합니다.

  1. Client는 MapReduce의 Job을 JobTracker에게 보냅니다
  2. JobTracker는 Clsuter의 다른 노드들에게 맵과 리듀스 Task를 할당합니다.
  3. 해당 노드들은 TaskTracker라는 데몬에 의해 각각 실행됩니다.
  4. TaskTracker는 Map,Reduce Task를 인스턴스화 한 뒤 진행 상황을 JobTracker에게 보고합니다.

TaskTracker

  • DataNode에서 실행되는 Daemon (DataNode에 위치)
  • 사용자가 설정한 MR 프로그램을 실행해 JobTracker로부터 작업을 요청 받은 뒤
  • Map과 Reduce 요청 개수만큼 Map,Reduce Task를 생성한 뒤 JobTracker에게 보고합니다.

Tags

#Hadoop#Spark#Data Engineering
NASA1515

NASA1515

Data Engineer

Hello I'M Wonseok aka NASA1515

Expertise

Public Cloud
k8s/Docker
Python

Social Media

instagramwebsitelinkedingithub

Related Posts

[STREMING PIPELINE] 실시간 스트리밍 데이터 파이프라인 (Real-Time) 구축: Confluent와 CDC를 활용한 실시간 데이터 처리 완벽 가이드
[STREMING PIPELINE] 실시간 스트리밍 데이터 파이프라인 (Real-Time) 구축: Confluent와 CDC를 활용한 실시간 데이터 처리 완벽 가이드
2024-02-10
7 min

Topics

CloudDevelop

Social Media