본문 바로가기

CS/DB

하둡(Hadoop)

Hadoop(High-Availability Distributed Object-Oriented Platfrom)

도입 배경

- 대용량 데이터의 관리 및 분석에 적합한 시스템

- 적은 초기 구축비용으로 도입 가능

- 데이터 증가에 따른 확장 용이

정의

- PC급 컴퓨터들로 가상화된 대형 스토리지를 형성하고 그 안에 보관된 거대한 데이터 세트를 병렬로 처리할 수 있도록 개발된 자바 소프트웨어 프레임워크

- 오픈 소스 기반 분산 컴퓨팅 플랫폼으로, 라이선스 비용이 불필요하고, 초기에 작은 클러스터를 구성하여 운영 가능

- 수천대의 분산된 장비에 대용량 파일을 저장할 수 있는 기능을 제공하는 분산파일 시스템(HDFS), 저장된 파일을 분산된 서버의 CPU와 메모리 자원을 이용하여 빠르게 분석하는 맵리듀스(MapReduce)로 구성

- 여러 데이터저장, 실행엔진, 프로그래밍 및 데이터처리 같은 하둡 생태계 전반을 포함하는 의미로 확장

구성요소

하둡 분산형 파일시스템(HDFS)

- JAVA로 개발된 순수 JAVA 파일 시스템으로 Peta Byte 이상의 대용량 데이터 저장에 효율적

- 시스템 확장이 용이하며 일부 데이터 노드의 장애 시에도 정상적으로 동작

- 데이터를 저장하면 다수의 노드에 복제 데이터도 함께 저장해서 데이터 유실을 방지

- 한번 저장한 데이터는 수정할 수 없고, 읽기만 가능하게 하여 데이터 무결성을 유지

  (2.0 알파 버전부터는 저장된 파일에 append가 가능)

- 데이터 수정은 불가능 하지만 파일 이동, 삭제, 복사할 수 있는 인터페이스를 제공

아키텍쳐 - Master/Slave 구조

네임노드

- HDFS의 파일 및 디렉터리에 대한 메타데이터를 관리하고, 클라이언트로부터 데이터 위치 요청이 오면 전달하며, 장애 발생 시 SecondaryNameNode로 대체된다.

 

데이터노드

- 데이터를 HDFSBlock 단위로 구성하며 Fault Recovery를 위해 default3 copy를 유지한다. Heartbeat를 통해 지속적으로 네임노드에 메타정보를 전달한다.

- 블록 구조의 파일 시스템으로, 저장하는 파일은 특정 사이즈의 블록으로 나눠져 분산된 서버에 저장된다.

- 하나의 블록은 3(기본값)로 복제되며, 각각 다른 HDFS의 노드에 분산 저장된다.

HDFS에는 마스터 역할을 하는 네임노드 서버와 슬레이브 역할을 하는 데이터노드 서버가 여러 대로 구성된다.

- 네임노드는 HDFS의 모든 메타데이터(블록 정보)를 관리하고, 클라이언트가 이를 이용하여 HDFS에 저장된 파일에 접근할 수 있다.

- 하둡 애플리케이션은 HDFS에 파일을 저장하거나, 저장된 파일을 읽기 위해 HDFS 클라이언트를 사용하며, 클라이언트는 API 형태로 사용자에게 제공된다.

- 데이터노드는 주기적으로 네임노드에 메타데이터(블록 정보)를 전송하고, 이를 통해 네임노드는 데이터 노드가 정상작동하는지 확인한다.

- 클라이언트는 네임노드에 접속해서 원하는 파일이 저장된 블록의 위치를 확인하고, 해당 블록이 저장된 데이터노드에서 직접 데이터를 조회한다.

맵리듀스(Map Reduce)

- 대용량 데이터를 다루는 분산/병렬 시스템의 효율적 자원 관리를 위한 목적으로 구글에서 개발한 프로그래밍 모델

- 맵과 리듀스라는 2개의 메소드로 구성

 

Map

- 흩어져 있는 데이터를 연관성 있는 데이터들로 분류하는 작업이다.(Key, Value 형태)

Reduce

- Map에서 출력된 데이터를 중복 제거하고 원하는 데이터로 추출하는 작업

Splitting : 문자열 데이터를 라인별로 나눈다.

Mapping : 라인별로 문자열을 입력받아, <Key, Value> 형태로 출력한다.

Shuffling : 같은 Key를 가지는 데이터로 분류한다.

Reducing : Key 별로 빈도수를 합산하여 출력한다.

Final Result : 리듀스 메소드의 출력 데이터를 합쳐서 하둡 파일 시스템에 저장한다.

MapReduce Job - 클라이언트가 수행하려는 작업 단위(입력 데이터, 맵리듀스 프로그램, 설정 정보로 구성)를 말한다.

 

MapReduce 시스템은 Client, JobTracker, TaskTracker로 구성되며 JobTracker는 네임노드에, TaskTracker는 데이터노드에 위치한다.

 

 

Client - 분석하고자 하는 데이터를 Job의 형태로 JobTracker에게 전달한다.

JobTracker - 하둡 클러스터에 등록된 전체 Job을 스케줄링하고 모니터링한다.

TaskTracker - 데이터노드에서 실행되는 데몬이고, 사용자가 설정한 맵리듀스 프로그램을 실행하며, JobTracker로부터 작업을 요청받고 요청받은 Map Reduce 개수만큼 Map TaskReduce Task를 생성한다.