'MapReduce'에 해당되는 글 1건

  1. 2014.04.23 01. Introduction to Big Data (3) - MapReduce?

          MapReduce 이란?           


맵리듀스(MapReduce) 구글에서 대용량 데이터 처리를 분산 병렬 컴퓨팅에서 처리하기 위한 목적으로 제작하여 2004년 발표한 소프트웨어 프레임워크다. 이 프레임워크는 페타바이트 이상의 대용량 데이터를 신뢰도가 낮은 컴퓨터로 구성된 클러스터 환경에서 병렬 처리를 지원하기 위해서 개발되었다. 이 프레임워크는 함수형 프로그래밍에서 일반적으로 사용되는 Map과 Reduce라는 함수 기반으로 주로 구성된다.

현재 MapReduce는 Java와 C++, 그리고 기타 언어에서 적용이 가능하도록 작성되었다. 대표적으로 아파치 하둡에서 오픈 소스 소프트웨어로 적용된다.


- WIKI, 위키백과 -

 

맵리듀스는 배치 기반의 분산 컴퓨팅 프레임워크다.



  • 맵리듀스 모델은 연산 병렬화, 작업 분산, 비안정적 하드웨어 및 소프트웨어를 다루는 복잡성 같은 요소를 추상화함으로써 병렬 처리를 단순화해준다.
  • 맵리듀스는 클라이언트에서 전송한 잡을 병렬화된 작은 맵과 리듀스 작업자로 분배한다.




  • 프로그래머가 할 일맵과 리듀스 함수를 정의하는 것이다.
    • 맵 함수는 키/값 튜플(tuple)을 출력
    • 출력된 튜플은 리듀스 함수에 의해 처리돼 최종 결과를 도출
      • 맵 : (key1, value1) → list(key2, value2)
                    ①                        ②
        ① : 맵 함수는 입력 데이터 소스의 논리적 레코드를 나타내는 키/값 쌍을 입력값으로 받는다.
            파일의 경우 이 값은 한 줄이 될 수 있고, 입력 소스가 DB의 테이블인 경우 한 행이 될 수 있다.
        ② : 맵 함수는 한 개의 입력값 쌍에 대해 0개 이상의 출력 키/값 쌍을 내보낸다.
            예를 들어 맵 함수가 필터링 맵 함수이면 특정 조건이 리듀스 함수에서는 충족될 때만 결과를 출력할 수 있다. 또는 한개의 입력 키/값이 여러 개의 키/값 출력 쌍을 반환하는 역다중화 작업을 수행할 수도 있다.
      • 리듀스 : (key2, list(value2)) → list(key3, value3)
            ①                        ②                    ③
        ① : 리듀스 함수는 고유 맵 출력. 키별로 한 번씩 
        ② : 'key2'에 대해 모든 매퍼에서 내보낸 맵. 출력값이 한 개의 목록으로 제공된다.
        ③ : 맵 함수와 마찬가지로 리듀스 함수도 0개 이상의 키/값 쌍을 출력할 수 있다. 리듀서 출력값은 HDFS 내 플랫 파일에 쓰거나, NoSQL DB에서 행을 삽입/업데이트하거나, 다른 요구 조건에 따라 임의의 데이터 싱크에 쓸 수 있다.




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


각 화살표 별로 설명을 하자면!!

  1. 입력 데이터 분리 : 맵리듀스는 입력 파일을 키와 값 형식의 데이터로 분류한다. 이 예제에서 키는 라인 번호이고 값은 문장이다.
  2. 맵 메서드1 : 키와 값 형식의 데이터는 맵 메서드의 입력 데이터로 전달된다.
  3. 맵 메서드2 : 맵 메서드는 라인 번호별로 문장을 체크해 키에 해당하는 글자별로 글자 수를 출력한다.
  4. 정렬과 병합 : 맵리듀스는 맵 메서드의 출력 데이터를 정렬하고, 병합한다.
  5. 리듀스 메서드 : 4번의 결과가 리듀스 메서드의 입력 데이터로 전달된다.
  6. 저장 : 리듀스 메서드는 새로운 키인 글자별로 각 글자 수를 합산해서 출력하고, 리듀스 메서드의 출력 데이터를 하둡 파일 시스템에 저장한다.



[ 맵리듀스 시스템 ]



  1. 클라이언트
    사용자가 실행한 맵리듀스 프로그램과 하둡에서 제공하는 맵리듀스 API를 의미한다.
    사용자는 맵리듀스 API로 맵리듀스 프로그램을 개발하고, 개발한 프로그램을 하둡에서 실행할 수 있다.
  2. 잡트래커(JobTracker)
    클라이언트가 하둡으로 실행을 요청하는 맵리듀스 프로그램은 (job)이라는 하나의 작업 단위로 관리된다.
    잡트래커는 하둡 클러스터에 등록된 전체 잡의 스케줄링을 관리하고 모니터링한다.
    전체 하둡 클러스터에서 하나의 잡트래커가 실행되며, 보통 하둡의 네임노드 서버에서 실행된다.(반드시 네임노드 서버에서 실행할 필요는 없음)
    사용자가 새로운 잡을 요청하면 잡트래커는 잡을 처리하기 위해 몇 개의 맵과 리듀스를 실행할지 계산한다.
    이렇게 계산된 맵과 리듀스를 어떤 태스크트래커에서 실행할지 결정하고, 해당 태스크트래커에 잡을 할당한다. 이 때 태스크트래커는 잡트래커의 작업 수행 요청을 받아 맵리듀스 프로그램을 실행한다. 잡트래커와 태스크트래커는 하트비트라는 메서드로 네트워크 통신을 하면서 태스크트래커의 상태와 작업 실행 ㅈ어보를 주고받게 된다. 만약 태스크트래커에 장애가 ㅂ라생하면 잡트래커는 다른 대기 중인 태스크트래커를 찾아 태스크를 재실행하게 된다.
  3. 태스크트래커(TaskTracker)
    사용자가 설정한 맵리듀스 프로그램을 실행하며, 하둡의 데이터노드에서 실행되는 데몬이다.
    태스크트래커는 잡트래커의 작업을 요청받고, 잡트래커가 요청한 맵과 리듀스 개수만큼 맵 태스크(map task)와 리듀스 태스크(reduce task)를 생성한다. 






Posted by 밍쫑
,