[컴] Hadoop 의 Map Reduce job

 

맵리듀스 / 단계 / 설명 / 하둡

Hadoop 의 Map reduce job

map task

하둡의 각 map task은 다음 4개로 나뉜다.

  • record reader
  • mapper
  • combiner
  • partioner

map task의 출력으로 나오는 keys and values 는 reducer들로 전송된다. 이 keys and value 는 intermediate 값이다.

reducer task

reducer task는 다음 단계로 구분된다.

  • shuffle
  • sort
  • reduce
  • output format

map task들이 실행되는 노드에 data 가 있다. 이 방식으로는 데이터는 일반적으로 네트워크를 통해 이동할 필요가 없으며 로컬 컴퓨터에서 계산할 수 있다.

단계들(phases)

record reader

  • record reader는 input format에 의해 생성된 input split을 record로 translate한다.
  • record reader의 목적은 데이터를 record로 parse하는 것이지만, record 자체를 parse하는 것은 아니다.
  • key/value pair의 형태로 데이터를 mapper에 전달한다.
  • 보통, 이 내용에서 키는 위치 정보이고 값은 레코드를 구성하는 데이터의 덩어리(chunk of data)이다.
  • 맞춤형 레코드 리더는 이 책의 범위 밖이다.
  • 일반적으로 데이터에 적합한 record reader가 있다고 가정한다.

map

  • mapper에서는 0개 이상의 새 key/value pair을 생산하기위해서 사용자가 제공한 코드가 각 key/value pair에서 실행된다.
  • 이 key/value pair 는 중간값(intermediate value) 이다.
  • key 와 value 를 무엇으로 하는지 정하는 것은 임의적이지 않고, MapReduce job 을 완료하는데 중요하다.
  • key 는 data 가 group 되는 기준이고, value 는 reducer에서 하는 분석과 관련있는 중요한 정보이다.
  • 이 책의 디자인 패턴에는 무엇이, 왜 특정 키/값이 선택되었는지 설명하기 위해 많은 디테일이 제공될 것이다.
  • MapReduce 설계 패턴 사이의 주요한 차별화 요소 중 하나는 이 pair의 의미이다.

combiner

  • 선택적인 localized reducer인 combiner 는 map phase에서 데이터를 그룹화할 수 있다.
  • mapper에서 중간 키를 가져와서 사용자가 제공한 메소드를 적용하여 mapper의 작은 범위(scope)에서 값을 집계(aggregate)한다.
  • 예를 들어, 집계 카운트(count of aggregation)는 각 part의 카운트 합계이므로 중간 카운트를 생성한 다음, 중간 카운트를 합해서 최종 결과를 만들 수 있다.
  • 많은 상황에서 이것이 네트워크를 통해 움직이는 데이터의 크기를 감소시킨다.
  • 네트워크를 통해 세 번 전송(헬로월드, 1)하는 것보다 전송(헬로월드, 3)하는 데 더 적은 바이트를 보내게 된다.
  • combiner는 그것들을 광범위하게 사용하는 패턴으로 더 깊이 다뤄질 것입니다.
  • 많은 새로운 하둡 개발자들이 combiner를 무시하지만, 그들은 종종 나쁜점 없이 최고의 성능 향상을 제공합니다.
  • 우리는 어떤 패턴이 combiner를 사용함으로써 이득이고 어떤 패턴이 combiner를 사용할 수 없는지를 책에서 알려줄것
  • combiner는 실행을 보장하지 않으므로 전체 알고리즘의 일부가 될 수 없다.

partitioner

  • partitioner는 mapper(또는 combiner가 사용중이라면, combiner)로부터 중간 key/value pair을 가져와서 그것들을 reducer 당 하나의 shard로 나눈다.
  • 기본적으로 partitioner는 hash code를 위해 object에서 정보를 얻는다. 이 hash code는 일반적으로 md5sum 이다.
  • 그런 다음 partitionaer는 key.hashCode() % (reducer 수) 를 수행한다.
  • 이렇게 하면 키 공간이 reducer에 고르게 분산되고, 다른 mapper에서 동일한 값을 가진 키가 동일한 reducer에 배치된다.(me: 간단하게 이야기하면, % 연산으로 나온값을 reducer key 로 사용하는 것.)
  • partitioner의 기본 동작은 사용자가 정의할 수 있으며, 정렬과 같은 몇몇 고급 패턴에 존재할 것이다.
  • 그러나 partitioner 를 변경할 필요는 거의 없다.
  • partitioned data는 각 map task에 대해서 로컬 파일 시스템에 기록된다.
  • partitioned data는 해당 reducer가 가져갈 때까지 기다리게 된다.

shuffle and sort

  • reduce task는 순서 shuffle and sort 단계부터 시작합니다.
  • 이 단계에서는 모든 partitioner들에 의해 작성된 output files을 가져와서 reducer가 실행 중인 로컬 컴퓨터에 다운로드한다.
  • 이러한 개별 data 조각은 키별로 정렬돼서 하나의 더 큰 데이터 목록으로 만들어진다.
  • 이 sort의 목적은 동일한 키를 그룹화하여 reduce 작업에서 해당 값을 쉽게 iterated 되도록 하는 것이다.
  • 이 단계는 사용자가 변경할 수 없으며 프레임워크가 모든 것을 자동으로 처리한다.
  • 개발자가 제어할 수 있는 유일한 것은 custom Comparator 개체를 이용해서 어떻게 키를 정렬할지 하고 그룹화할지 정하는 것

reduce

  • reducer 는 그룹화된 데이터를 입력으로 받아, 키 그룹당 한 번씩 reduce 기능을 실행한다.
  • 함수는 해당 키와 관련된 모든 값에 대한 키와 iterator를 전달받는다.
  • 우리의 많은 패턴에서 볼 수 있듯이, 이 함수에서 광범위한 처리가 발생할 수 있다.
  • 데이터는 여러 가지 방법으로 aggragated, filtered, combined 될 수 있다.
  • reduce 함수가 완료되면 0개 이상의 key/value pair를 최종 단계인 output format으로 전송한다.
  • reduce함수는, map function과 마찬가지로, 솔루션의 핵심 논리 부분이기 때문에 작업마다 변경될 것이다.

output format

  • output format은 reduce 함수에서 최종 key/value pair를 translate해서, 그것을 record writer를 이용해서 file 에 쓴다.
  • 기본적으로 키와 값은 tab으로 구분하고 record는 newline character로 구분한다.
  • 이것은 일반적으로 더 풍부한 output format을 제공하기 위해 커스터마이징될 수 있다.
  • 데이터는 format에 관계없이 결국 HDFS에 기록된다.
  • I/O만 처리하기 때문에, output format을 커스터마이징하는 것은 이 책의 범위를 벗어난다.

Reference

  1. MapReduce Design Patterns Building Effective Algorithms and Analytics for Hadoop and Other Systems Kindle Edition by Donald Miner - 2013

댓글 없음:

댓글 쓰기