[Hadoop] 맵리듀스
programming/hadoop

[Hadoop] 맵리듀스



4. 맵리듀스


4.1 MapReduce의 실행 과정


 맵 : (k1, v1) → list(k2, v2)

 리듀스 : (k2, list(v2)) → list(k3, v3)


 4.1.1 입력데이터

  read a book

  write a book


 4.1.2 맵으로 변환(key: line number, value: 문장)

  1, read a book

  2, write a book


 4.1.3 정렬과 병합(key: 단어, value: 단어수)

  <read, 1>

  <a, 1>

  <book, 1>

  <write, 1>

  <a, 1>

  <book, 1>


 4.1.4 Reduce(key: 단어, value: 단어수의 리스트)

  <read, (1)>

  <a, (1, 1)>

  <book, (1, 1)>

  <write, (1)>


 4.1.5 실행 결과(key: 단어, value: 리스트의 합계)

  <read, 1>

  <a, 2>
  <book, 2>
  <write, 1>


4.2 맵리듀스 프로그래밍 요소


 4.2.1 데이터 타입

  맵리듀스 프로그램에서 키와 값으로 사용되는 모든 데이터 타입은 반드시 WritableComparable 인터페이스를 구현해야 함


  1) WritableComparable 인터페이스를 구현한 Wrapper 클래스 목록

클래스명

데이터 타입

BooleanWritable

Boolean

ByteWritable

단일 Byte

DoubleWritable

Double

FloatWritable

Float

IntWritable

Int

LongWritable

Long

TextWritable

UTF-8 형식의 문자열

NullWritable

데이터 값이 필요없을 경우 사용



  2) InputFormat

InputFormat

기능

TextInputFormat

텍스트 파일을 분석할 때 사용

개행문자를 기준으로 레코드 분류

Key : Line Number(LongWritable 타입)

Value : Line의 내용(Text 타입)

KeyValueTextInputFormat

텍스트 파일을 분석할 때

라인 번호가 아닌 임의의 key를 사용

NLineInputFormat

텍스트 파일의 라인수를 제한할 때 사용

DelegatingInputFormat

여러 개의 서로 다른 입력 포맷을 사용할 경우 각 경로에 대한 작업을 위임

SequenceFileInputFormat

SequenceFile을 입력받을 경우 사용

SequenceFile - 바이너리 형태의 키와 값의 목록으로 구성된 텍스트 파일

SequenceFileAsBinaryInputFormat

SequenceFile의 키와 값을 임의의 바이너리 객체로 변환하여 사용

SequenceFileAsTextInputFormat

SequenceFile의 키와 값을 Text 객체로 변환해서 사용


  2) Mapper

   key와 value로 구성된 입력 데이터를 전달받아 데이터를 가공하고 분류해 새로운 데이터 목록을 생성


  3) Partitioner

   맵 태스트의 출력 데이터가 어떤 리듀스 태스트로 전달될지 결정


  4) Reducer

   Map Task의 출력 데이터를 입력 데이터로 전달받아 집계 연산 수행


  5) Combiner

   Mapper의 출력 데이터를 입력 데이터로 전달받아 연산을 수행하여 Shuffle할 데이터의 크기를 줄일 경우 사용

   Shuffle : Map Task와 Reduce Task 사이의 데이터 전달 과정


  6) OutputFormat

OutputFormat

기능

TextOutputFormat

텍스트 파일에 레코드를 출력할 때 사용 Key와 Value의 구분자는 탭 문자

SequenceFileOutputFormat

SequenceFile을 출력물로 사용할 경우

SequenceFileAsBinaryOutputFormat

바이너리 포맷의 Key와 Value를 사용

FilterOutputFormat

OutputFormat 클래스를 편리하게 사용할 수 있는 method 제공

NullOutputFormat

출력 데이터가 없을 때 사용


4.3 실습 예제(WordCount)


 4.3.1 count.MyMapper.java

 4.3.3 count.WordCount.java