one of a kind scene

4-2 데이터 처리 기술_분산 컴퓨팅 기술 part1_MapReduce 본문

ADP/이론

4-2 데이터 처리 기술_분산 컴퓨팅 기술 part1_MapReduce

specialscene 2019. 12. 16. 23:00

분산 컴퓨팅 기술 part1_MapReduce

MapReduce는 대용량 데이터를 분산 처리 하기 위한 프로그래밍 모델

 

1. 개념 및 특징

    • MapReduce는 구글에서 분산 병렬 컴퓨팅을 이용하여 대용량 데이터를 처리하기 위한 목적으로 제작한 소프트웨어 프레임 워크

    • 분할정복 방식으로 대용량 데이터를 병렬로 처리할 수 있는 프로그래밍 모델

    • 분할정복(divide and conquer) : 해결하고자 하는 문제를 성질이 같은 여러 부분으로 나누어 해결한 뒤, 원래 문제의 해를 구하는 방식

    • 구글 외에 아파치 하둡에서 오픈 소스 프로젝트로 시작한 자바(Java) 기반의 'Hadoop MapReduce' 프레임 워크가 동일한 기능 지원

    • Client의 수행 작업 단위는 맵리듀스 잡(MapReduce Job)이라고 함

    • Map Task 하나가 1개의 블록(64MB)을 대상으로 연산 수행

    • (예) 320MB의 파일 → 5개의 Map Task 생성

    • Map 과정에서 생산된 중간 결과물들을 사용자가 지정한 개수에 해당되는 Reduce Task들이 받아와서 정렬 및 필터링 작업을 거쳐서 최종 결과물(output)을 만들어 냄

<MapReduce의 작업 흐름>

2. 구글 MapReduce

     ① 구글 MapReduce 개발 배경

          • 대용량 처리하는 데에 있어서 연산의 병렬화, 장애 복구 등의 복잡성을 추상화시켜서 개발자들이 오직 핵심 기능 구현에만 집중할 수 있도록 하기 위해 MapReduce를 만듦

 

     ② 프로그래밍 모델 : Map과 Reduce라는 2개의 단계

          • Map에서는 (key, value)쌍 형태로 입력된 문장을 변환 (예) I love you → (I, 1) , (love, 1) , (you, 1)

          • (key, value)쌍으로 변환된 문장은 shuffling과 group by정렬 과정을 자동으로 거친 후 (key, [value list]) 형식으로 Reduce에게 전송 

          • (key, [value list]) 형식으로 Reduce에 입력되면 사용자가 정의한 Reduce 함수를 통해 최종 Output으로 산출됨

          • 사용자 관점에서는 장애 복구와 같은 세세한 이슈들은 신경 쓸 필요 없이, Map과 Reduce 두 함수만 작성하는 것만으로 대규모 병렬 연산 작업을 수행할 수 있다.

          • (과정1) 문장 변환 : I love book book book → (I, 1) , (love, 1), (book, 1), (book, 1) , (book, 1)

          • (과정2) Map과정 후(=Reduce에 전달되는 모양) : (I, [1]) , (love, [1]) , (book, [1,1,1])

          • (과정3) Reduce 과정 후(사용자가 정의한 Reduce 함수가 sum인 경우) : (I, 1) , (love, 1) , (book, 3)

     

     ③ 실행 과정

          • 사용자가 MapReduce 프로그램 작성 및 실행

          • Master는 사용자가 작성한 MapReduce 프로그램에서 지정한 입력 데이터소스를 가지고 MapReduce를 하기위한 스케줄링 실시

          • 큰 파일 여러 개의 파일split들로 나뉘며, 각 split들이 Map 프로세스들의 할당 단위가 됨

          • 보통 split 단위는 블록 사이즈인 64MB 또는 128MB

          • split 수만큼 Map Task들이 워커로부터 fork되며, Output을 로컬 파일시스템에 저장

          • Output 값들은 pratitioner라는 Reduce 번호를 할당해 주는 클래스를 통해 어떤 Reduce에게 보내질지 정해짐

          • 특별히 정해지지 않으면 Key와 해시(Hash)값을 Reduce갯수로 Modular(=나눠서 나머지값) 계산한 값이 부여되어 동일한 Key들은 같은 Reduce에 배정

          • Map 단계가 끝나면 원격의 Reduce 워커들이 자기에 할당된 Map의 중간 값들을 네트워크로 가져, 사용자의 Reduce 로직을 실행해 최종 산출물을 얻어냄

          • 보통 Reduce의 개수는 Map의 개수보다 적으며, Map의 중간 데이터 사이즈에 따라 성능이 좌우됨. 즉, Map을 거친 후 중간 데이터가 줄어드는 만큼 성능이 향상됨

 

     ④ 폴트톨러런스

          • 각 프로세스에서는 Master에게 Task 진행 상태를 주기적으로 보냄

          • Master는 특정 Map이나 Reduce Task들이 죽은 경우(=장애가 발견되면),  해당 Task가 처리해야할 데이터 정보만 다른 워커에게 전해 주면 워커는 받은 데이터 정보를 인자로 새로운 Task를 재실행

          • MapReduce는 Shared Nothing 아키텍쳐이기 때문에 간단한 메커니즘

 

    ⑤ MapReduce 모델 적용의 적합성

적합한 경우 적합하지 않은 경우

분산 Grep(텍스트 검색 기능)이나 빈도 수 계산 등의 작업

→ Map 단계를 거치면서 데이터 사이즈가 크게 줄어들고,

    줄어든 크기만큼 Reduce 오버헤드도 줄어듦에 따라 

    성능상 이점이 많다

정렬(sort)과 같은 작업

→ 입력 데이터의 사이즈가 줄지 않고, 그대로 Reduce로

    전해지므로 오버헤드에 따라 수행 성능이 저하

 

 

3. 하둡(Hadoop) MapReduce

     ① 하둡(Hadoop) MapReduce 개발 배경

          • 구글에서 발표한 MapReduce 논문을 바탕으로 자바(Java) 언어로 구현된 시스템

 

     ② 아키텍처

           하둡은 데몬(서버의 메인메모리 상에서 백그라운드로 수행되는 프로그램)관점에서 4개의 구성요소를 지님

           네임노드(NameNode)

             - 마스터 역할을 수행하며, 네임 스페이스를 관리

             - 가장 기본적이고 필수적인 데몬

           데이터노드(DataNode)

             - 파일의 실질적인 데이터 입출력에 대한 처리를 수행 

           잡트래커(JobTracker)

             - MapReduce 시스템에서 job이라는 작업을 관리하는 마스터에 해당 

             - 네임노드(NameNode)에 위치 = 클러스터(여러 노드들의 묶음)에 1개의 잡트래커 존재

           태스크트래커(TaskTracker)

             - 작업을 수행하는 워커 데몬이며 슬레이브에 해당

             - 각 노드에 1개의 태스크 트래커 존재

<하둡 high-level(덜 상세한) 아키텍쳐>

 

     ③ 하둡(Hadoop) MapReduce 실행절차 : 7단계

           1단계 : 스플릿(Split)

             - HDFS의 대용량 입력 파일(input)을 분리(split)하여 파일스플릿(File-Split)을 생성

             - FileSplit 하나당 맵 태스크(Map Task) 하나씩을 생성

           2단계 : 맵(Map)

             - 각 스플릿(split)에 대해 레코드 단위로 map함수 적용 → key-value 쌍을 생성

           3단계 : 컴바인(Combine)

             - 리듀스 단계로 데이터를 보내기 전에 중간 결과값들을 처리하여 데이터의 크기를 줄여준다.

             - 리듀스(Reduce)와 동일한 프로그램을 적용

           4단계 : 파티션(Partition)

             - key를 기준으로 데이터를 디스크에 분할 저장

             - 각 파티션은 키를 기준으로 정렬 수행

             - 분할된 파일들은 각각 다른 리듀스 태스크(Reduce Task)에 저장

           5단계 : 셔플(Shuffle)

             - 여러 맵퍼들의 결과 파일을 각 리듀서에 할당 → 할당된 파일을 로컬 파일 시스템으로 복사

           6단계 : 정렬(Sort)

             - 병합 정렬(Merge Sort)방식을 이용하여 맵퍼의 결과 파일을 key를 기준으로 정렬

           7단계 : 리듀스(Reduce)

             - 정렬 단계에서 생성된 파일에 대해서 리듀스 함수를 적용

<MapReduce word count 흐름>

 

     ④ 하둡(Hadoop)의 성능

           MapReduce의 sort는 MapReduce에서 어떠한 작업을 실행하더라도 Map에서 Reduce로 넘어가는 과정에서 항상 발생하는 내부적인 프로세스임

           sort 작업은 데이터가 커질수록 처리시간이 선형적으로 증가. 라서, sort는 하둡같은 분산컴퓨팅 플랫폼의 성능과 확장성을 동시에 측정할 수 있는 좋은 실험

           단순히 클러스터 구성 서버들의 숫자만 늘린다고 처리 시간을 줄일 수 있는 것은 아니며, 플랫폼 자체적으로 선형 확장성을 갖고 있어야 처리 시간을 줄일 수 있다.