Notice
Recent Posts
Recent Comments
Today
Total
05-04 17:52
Archives
관리 메뉴

Jeongchul Kim

하둡 Hadoop 01-1 하둡 개요 본문

하둡

하둡 Hadoop 01-1 하둡 개요

김 정출 2016. 1. 28. 12:35

하둡 Hadoop 01-1 하둡 개요


빅 데이터 시대에 살고 있는 지금 방대한 크기의 데이터를 저장하고, 처리하는 기술은 데이터를 경쟁력 있게 활용하는 방법이다.


하둡 Hadoop은 많은 양의 데이터를 효과적으로 저장, 저장된 데이터를 연산 기능 제공하고 있다.

하둡 Hadoop은 분산 파일 시스템으로 구성된 분산 시스템이며 장비 클러스터(Cluster)에서 프로그램을 병렬적으로 실행한다.

하둡 Hadoop은 이미 야후, 페이스북, 트위터 같은 IT 기업에서 빅 데이터(Big data)를 처리하기 위해 채택한 기술이다.


Hadoop이란?

하둡이란?

하둡 Hadoop분산 저장소와 연산 기능을 제공하는 플랫폼(Platform)이다.

하둡 Hadoop오픈 소스 크롤러이자 검색 엔진인 너치(Nutch)에서의 확장성 문제를 해결을 위해 등장.

당시 구글은 새로 개발한 분산 파일 시스템인 구글 파일 시스템(GFS; Google File System)과 병렬 처리를 위한 연산 프레임워크(Framework)인 맵리듀스(Map Reduce)를 소개하는 논문을 발표.

너치(Nutch)를 통해 논문의 내용이 성공적으로 구현되면서, 프로젝트가 두 개의 별도로 나뉘며,

이 중 두 번재 프로젝트가 아파치(Apache) 1급 프로젝트 하둡 Hadoop이 되었다.

위의 그림과 같이 하둡 Hadoop은 저장을 위한 하둡 분산 파일 시스템(HDFS; Hadoop Distributed File System)으로 구성된 마스터-슬레이브 아키텍처와 연산을 위한 맵리듀스(Map Reduce)로 이루어진다.


하둡 Hadoop은 기본적으로 대용량 데이터 셋(Data-set)데이터 파티셔닝(분할)과 병렬 처리가 되도록 설계됐다. 하둡의 저장 공간과 연산 능력은 하둡 클러스터에 호스트를 추가함에 따라 늘어나며, 수 천개의 호스트를 추가하면 페타베이트(Pb = 1000Tb)크기의 데이터까지 처리 가능하다.


위의 그림에서 마스터 노드의 맵 리듀스 마스터는 슬레이브 노드에서 실행 예약할 연산 작업을 관리하는 책임을 담당한다.


마스터 노드의 HDFS 마스터는 슬레이느 노브 사이의 저장 공간 파티셔닝과 데이터 저장 위치를 관리하는 책임을 담당한다.


핵심 하둡 컴포넌트(Component)

1. HDFS

HDFS 는 하둡의 저장소 컴포넌트이다. HDFS 는 구글 파일 시스템(GFS) 논문을 따라 모델링 한 분산 파일 시스템으로 높은 쓰르풋(throughput)에 최적화돼 있으며, 대용량 파일(Gb 이상)을 읽을 때 가장 효과적이다.

쓰르풋을 지원하기 위해 HDFS는 파일 시스템으로서는 기존과 다르게 큰 블록 크기(Block size) 및 데이터 로컬리티 = 지역성(data locality)를 통한 최적화(Optimization)를 활용해 네트워크 입출력(Network I/O)을 줄인다.

확장성 가용성 또한 HDFS의 핵심 특징이다. 데이터 복사 및 내고장성(fault-tolerance) 덕분에 가능하다.

HDFS 는 설정된 횟수만큼 파일을 복사하고, 소프트웨어 및 하드웨어의 장애를 견디며, 장애가 생긴 노드에서는 데이터 블록(Data block)을 자동으로 재복사한다.


밑의 그림에서는 네임 노드(Name node)와 데이터 노드(Data node)를 볼 수 있다.  

또, 하둡 파일시스템 라이브러리를 사용해 HDFS에 접근하는 에플리케이션도 볼 수 있다.


HDFS 클라이언트는 메타 데이터 관련 활동과 관련해 네임 노드와 통신하고, 파일 읽기/쓰기와 관련해

데이터 노드와 통신한다.


HDFS 네임노드는 어떤 데이터 노드가 각 파일 블록(File Block)을 관리하는 지 등과 같은 파일 시스템에 대한

메타 데이터를 메모리에 보관한다.


데이터 노드는 파일 읽기 및 쓰기 파이프 라인(Pipe line)을 통해 서로 통신한다.


파일은 블록으로 구성되며, 각 파일은 여러 차례 복사된다. 이는 파일의 블록 별로 동일한 복사본(기본적으로 3개)이 있다는 뜻이다.




2. Map Reduce 맵리듀스

Map reduce 맵리듀스는 구글의 맵리듀스 관련 논문을 따라 모델링한 배치(Batch) 기반의 분산 컴퓨팅 프레임워크(Framework)이다.

Map reduce대용량 데이터에 대한 병렬 작업을 지원하므로, 웹 로그(Web log)를 OLTP 데이터베이스에 가져온 관계형 데이터와 결합해 사용자가 웹 사이트(Web site)와 어떻게 상호 작용 하는지를 모델링하는 등의 작업이 가능하다. 일반적인 직렬 프로그래밍 기법을 사용하면 며칠 이상 걸리는 작업도 하둡 클러스터에서 Map reduce를 사용하면 몇 분만에 마칠 수 있다.


맵리듀스 모델은 연산 병렬화, 작업 분산, 비안정적 하드웨어 및 소프트웨어를 다루는 복잡성 같은 요소를 추상화함으로써 병렬 처리를 단순화해준다. 이런 추상화 덕분에 맵리듀스를 통해 프로그래머는 분산 시스템의 복잡성에 신경 쓰지 않고, 비즈니스 요구 조건 처리에 집중할 수 있다.


Map reduce 맵리듀스는 밑의 그림과 같이 클라이언트(Client)에서 전송한 잡(Job)을 병렬화 된 작은 맵(Map)과 리듀스 작업자로 분배한다. 맵리듀스에서 사용하는 리듀스 개념은 리스프(Lisp)의 함수형 프로그래밍 언어에서 가져온 개념으로, 원하지 않는 동기화 지점이나 상태 공유를 초래할 수 있는 병렬 실행 상호 의존성을 모두 제거하기 위해 무공유 모델(shared-nothing model)을 사용하고 있다.



* Lisp

"LISt Processing"(리스트 프로세싱)의 줄임말이다. 연결 리스트는 리스프의 주요 자료구조 중 하나로서,  

Lisp 코드는 그 자체로 하나의 리스트(List)이다. 그 결과로, Lisp 프로그램은 소스 코드를 자료 구조를 다듬는 수준으로 재 배치할 수 있게 된다. Lisp 매크로 시스템을 통해 프로그래머는 새로운 소스 코드를 만들 수 있으며, 심지어 기존 Lisp에 내장되는 새로운 언어, 그것도 특정 목적을 위한 용도의 언어를 만들어낼 수 있다.

코드와 데이터의 교환이 가능하다는 것은 리스프 그 자체에 있어 코드를 즉각 해석할 수 있는 능력을 준다. 전체 프로그램 코드는 S-표현식 이나 괄호로 묶인 리스트로 작성되며, 함수 호출의 경우 함수 이름 혹은 연산자가 첫 번째로 위치하여 피연산자가 이어 위치하게 된다. 예를 들면, 함수 f 가 a, b, c 라는 세 개의 피연산자를 가진 경우는 (f a b c)와 같이 표기한다.


* 무공유 모델

무 공유 아키텍처는 각 노드가 서로 독립적이며, 자급자족적임(self-sufficient)을 나타내는 분산 컴퓨팅 개념


하둡 프로그래머가 할 일은 맵과 리듀스 함수를 정의하는 것이다.

이 때 맵 함수키/값 튜플(tuple)을 출력하고, 이렇게 출력된 튜플은 리듀스 함수에 의해 처리돼 최종 결과를 도출한다.


입력 및 풀력과 관련된 맵 함수의 의사코드 정의는 다음과 같다.

맵 함수는 입력 데이터 소스의 논리적 레코드를 나타내는 키/값 쌍을 입력으로 받는다.

ex) 파일의 경우 한 줄, 데이터베이스의 테이블의 경우 한 행


map(key1, value1) -> list(key2,value2)


맵 함수는 한 개의 입력 값에 대해 0개 이상의 출력 키/값을 내보낸다.

맵 함수가 필터링 맵 함수이면 특정 조건이 리듀스 함수에서는 충족될 때만 결과를 출력한다.

또는 한 개의 입력 키/값이 여러 개의 키/값 출력 쌍을 반환하는 역다중화 작업을 수행할 수 있다.


위의 그림에서

맵리듀스의 강력한 기능은 맵의 출력 결과와 리듀스의 입력 결과 사이에서 셔플 및 정렬을 수행함으로써 일어난다.


셔플 및 정렬 단계에서는 두 개의 주요 작업을 처리한다. 맵 출력 키/값 쌍을 수신할 리듀서를 판단하는 작업(파티셔닝)과 해당 리듀서에 대해 모든 입력키가 정렬되는 기능이다.


같은 키에 대한 맵 출력값은 같은 리듀서로 가고, 이후 리듀서에 대한 단일 입력 레코드 결합한다.


각 리듀서의 모든 입력 키는 정렬되어 있다.




reduce(key2, list(value2)) -> list(key3,value3)


리듀스 함수의 의사코드 정의는 다음과 같다.


리듀스 함수는 고유 맵 출력 키별로 한 번씩 호출된다.

key에 대해 모든 Mapper에서 내보낸 맵 출력값이 한 개의 목록으로 제공된다.

맵 함수와 마찬가지로 리듀스 함수도 0개 이상의 키/값 쌍을 출력한다. 리듀서 출력 값은 HDFS 내 플랫 파일에 쓰거나, NoSQL 데이터베이스에서 삽입되거나 다른 데이터 싱크에 쓸 수 있다.



하둡의 맵 리듀스 아키텍처는 HDFS의 마스터-슬레이브 모델과 유사하다.

맵 리듀스 클라이언트는 잡 트래커(Job Tracker)와 통신해 잡(Job)을 실행하고 관리한다.


잡 트래커(Job Tracker)는 슬레이브 태스크 트레커(Task tracker) 프로세스 사이의 활동을 조율한다. 잡 트래커는 클라이언트로 부터 맵 리듀스 잡 요청을 수신하고 이를 처리하기 위해 맵 및 리듀스 잡을 수행할 태스크 트레커를 예약한다.


태스크 트래커(Task Tracker)는 실제 맵 또는 리듀스 잡을 수행하는 자식 프로세스를 생성하는 데몬 프로세스다.


맵 테스크는 주로 HDFS에 있어 입력값을 읽고, 출력 결과를 로컬 디스크에 쓰는 일이다.


리듀스 테스크는 네트워크 상에서 맵 출력값을 읽고 출력 결과를 HDFS에 다시 쓰는 일이다.




Comments