A Column

[이응수의 IT노트] 하둡(Hadoop)의 맵리듀스(Map/Reduce) 프레임워크

장성민

view : 955


[이응수의 IT노트] 하둡(Hadoop)의 맵리듀스(Map/Reduce) 프레임워크



안녕하세요. 중앙HTA 이응수 강사입니다.

오늘 이응수의 IT노트에서는 하둡(Hadoop)의 맵리듀스(Map/Reduce) 프레임워크를 살펴보도록 하겠습니다.

 

맵리듀스(Map/Reduce)는 분산 환경에서 <Key, Value> 구조를 이용해서 대규모 데이터를 처리하기 위한 병렬 컴퓨터 

프레임워크 입니다. Map/Reduce는 데이터를 여러 조각으로 분할한 후 분산환경에서 <Key, Value> 구조로 데이터를 

병렬처리하고, 이를 가공해서 <Key, Value> 구조로 출력합니다. 

하둡은 HDFS 환경에서 이런 작업을 수행하는 프로그램을 손쉽게 작성할 수 있도록 Map/Reduce 프레임워크를 제공합니다.

 

하둡의 Map/Reduce 프레임워크는 map과 reduce 두 단계로 데이터를 처리합니다.

map은 산재된 여러 데이터들을 <Key, Value>의 연관성이 있는 데이터로 묶는 작업을 수행하고, 

reduce는 map 작업 결과에서 중복 데이터를 제거한 후 최종 데이터를 추출하는 작업을 수행합니다.

 

Map/Reduce 프레임워크에서 데이터의 처리절차는 3단계에 걸쳐서 처리됩니다.


1단계에서는 각종 원시 데이터를 <Key, Value> 구조의 쌍으로 묶어서 map함수의 입력으로 보내는 단계입니다. 

         원시 데이터가 파일인 경우 Key는 라인번호가 되고, Value는 그 라인의 텍스트 데이터가 됩니다. 

         map 함수에서는 분석 대상 데이터를 추출하고, 원하는 형태로 데이터를 가공합니다.

         map 함수의 실행결과로 얻어지는 출력 데이터도 <Key, Value> 구조의 데이터입니다.


2단계에서는 map 함수의 출력 데이터를 Key를 기준으로 정렬해서 reduce 함수로 보냅니다. 

                   정렬된 데이터는 reduce함수의 입력값이 됩니다. 이 과정을 suffle라고 합니다.


3단계에서 reduce함수는 2단계로부터 받은 입력데이터를 분석해서 최종 결과값을 구합니다.

 

Map/Reduce 프레임워크의 각 단계별 데이터를 흐름은 아래와 같습니다.



위의 그림에서 개발자는 map함수와 reduce함수를 구현하기만 하면 됩니다. 

Map/Reduce프레임워크는 다양한 데이터소스로부터 데이터를 <K1, V1>형태로 만들어서 map함수의 입력값으로 넣어 줍니다. 

map함수에서는 입력데이터에서 분석대상 데이터를 추출해서 <K2, V2>형태로 변환하는 작업만 수행하면 Map/Reduce 

프레임워크는 suffle 과정을 수행해서 동일한 K2를 가지는 값들을 묶어서 <K2, list(V2)> 구조로 만들고 정렬해서 

reduce함수의 입력값으로 제공합니다. reduce함수에서는 <k2, list(V2)> 형태의 전달된 동일한 Key를 가지는 값을 분석해서 

<K3, V3>형태의 최종 결과를 만들어냅니다.

즉, 개발자는 입력데이터를 변형해서 분석에 적합한 데이터 형태로 변환하는 map함수와 데이터를 분석해서 최종 결과데이터를 

출력하는 reduce함수의 구현하면 분산환경의 여러 노드에서 실행되는 병렬처리 프로그램을 간단히 구현할 수 있습니다.


위에서 설명한 데이터 흐름을 단어 빈도수 세기 프로그램을 예로 들어서 나타내보도록 하겠습니다.



파일로부터 한 라인씩 데이터를 읽어서 map 함수에 <K1, V1>형태로 데이터를 제공하면 최종결과로 <K3, V3>형태의 

단어별 빈도수를 출력하는 Map/Reduce 프로그램에서의 데이터 흐름입니다.

 

Map/Reduce 프레임워크를 이용해서 작성된 프로그램은 일반적인 프로그램과는 다른 특징을 가지게 됩니다.

첫번째는 데이터가 있는 서버로 코드가 전송됩니다. 전통적인 프로그램은 데이터를 가져와서 처리하는 방식이라면,

   Map/Reduce 프레임워크는 대용량 데이터의 처리 속도를 높이기 위해서 데이터가 위치한 각 노드로 처리 코드를 

   전달해서 데이터를 처리합니다.

두번째는 <Key, Value> 형태의 데이터셋트로 데이터를 변형해서 처리합니다.

세번째는 실시간 데이터 처리보다는 데이터를 처리하는데 많은 시간이 소요되는 오프라인 배치 처리 작업에 매우 적합합니다.

 

Map/Reduce 프레임워크의 주요 API를 살펴보겠습니다.

Map/Reduce 프레임워크에서 제공하는 기본 데이터 타입 클래스를 알아보고, Mapper클래스와 Reducer 클래스에 대하여 

알아보겠습니다. 그리고, MapReduce를 실행하는 Job클래스에 대해서도 알아보겠습니다.

 

Map/Reduce 프레임워크는 정수, 실수, 불린, 문자열을 다루기 위한 기본 데이터 타입 클래스를 제공합니다. 

Map/Reduce 프레임워크에서 제공하는 데이터타입 클래스는 WritableComparable<T> 인터페이스를 구현하고 있습니다. 

Writable 인터페이스는 직렬화와 관련된 메소드를 정의하고 있고, WriteableComparable<T> 인터페이스는 Writable 

인터페이스에 값을 비교할 수 있는 메소드가 추가된 인터페이스입니다. Map/Reduce 프레임워크에서는 데이터의 입력과 

출력 및 데이터를 정렬하는데 필요한 기능을 Writable 인터페이스와 WritableComparable 인터페이스에 정의하고, 

이를 구현한 데이터 타입 클래스를 제공하고 있는 것입니다.

Map/Reduce 프레임워크의 기본 데이터 타입 클래스는 BooleanWritable, ByteWritable, intWritable, LongWritable, FloatWritable, DoubleWritable, MapWritable, NullWritable, ArrayWritable, Text 등입니다. 

대부분의 데이터 타입 클래스는 값을 반환하는 get() 메소드와 값을 저장하는 set(값) 메소드를 제공합니다. 

Text는 문자열을 다루는 데이터 타입 클래스입니다.

Map/Reduce 프레임워크는 WritableComparable<T> 인터페이스를 구현해서 사용자정의 데이터 타입 클래스를 

구현할 수 있습니다. 


아래는 간단한 사용자정의 데이터타입 클래스입니다.




Map/Reduce 프레임워크의 Map클래스와 Reduce클래스를 알아보겠습니다.


Mapper클래스는 아래의 클래스를 상속받고, map메소드를 재정의합니다.



Mapper 클래스의 map 메소드에서는 <KEYIN, VALUEIN> 타입의 데이터를 가공해서 <KEYOUT, VALUEOUT> 타입으로 

출력합니다. map함수는 각각의 <Key, Value>마다 한번씩 실행됩니다.


Reducer클래스는 아래의 클래스를 상속받고, reduce메소드를 재정의합니다.



Reducer클래스의 reduce메소드에서는 KEYIN타입의 값을 여러개 전달받아서 집계한 최종결과를 

<KEYOUT, VALUE> 타입으로 출력합니다. reduce메소드는 각 Key별로 한번씩 수행됩니다.


Mapper클래스와 Reducer클래스를 활용한 Map/Reduce 프로그램은 다음 시간에 간단한 예제를 통해서 알아보도록 하겠습니다.

 

마지막으로 Job클래스 입니다. 

Job클래스는 Map/Reduce 작업를 실행하는 Driver클래스에서 필요한 정보를 지정할 때 사용되는 클래스입니다.

Job 클래스는 Map/Reduce 작업의 Key클래스와 Value클래스, 실행할 Mapper클래스와 Reducer클래스, 입력포맷형식과 

출력포맷형식, 입력데이터 경로와 출력데이터 저장경로 등을 지정하고, Map/Reduce 작업을 실행시킵니다.


일반적인 Driver클래스에서 Job 클래스의 설정은 아래와 같은 형태입니다.


 

이상 맵리듀스(Map/Reduce) 프레임워크에 대해서 간단히 살펴보았습니다.

다음에는 Map/Reduce 프레임워크를 활용해서 간단한 예제를 작성하고 실행결과를 확인해보도록 하겠습니다.


날씨가 무척 쌀쌀해졌네요.

다들 감기조심하시고 건강 챙기시길 바랍니다.


감사합니다.




<저작권자(c)중앙에이치티에이(주). 무단전재-재배포금지>




먼저 비밀번호를 입력하여 주세요.

창닫기확인

TOP