Hadoop

MapReduce

집못가는프로그래머 2021. 9. 8. 16:22

HDFS가 데이터 저장에 관련된 업무를 한다면 MapReduce, Spark 등은 데이터 분석 / 처리를 담당한다.

 

1. 개념

- MapReduce란 빅데이터를 처리하는 방법론이다.

더보기

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

- 3개의 로직으로 구분된다.

1) Mapper 2) Shuffle 3) Reducer

데이터가 
'행'으로 쪼개져서
전해진다
Mapper Shuffle Reducer
초기 단계 중간 단계 마지막 단계
'행'으로 쪼개진 데이터를 받아서
처리할 방식 결정
데이터를 모아서 정렬 정렬된 데이터를 어떻게 처리할지 결정

*Mapper와 Reducer는 개발자가 원하는 방식으로 프로그래밍한다.

 

Mapper 코드 예시) 

import sys

for line in sys.stdin :    # 표준 입력값을 받아서 행으로 나눈다
    line = line.strip()     # 행의 정보에 대한 사전처리 (양 끝의 공백제거)
    words = line.split()  # 받은 행의 정보를 공백을 구분자로 나눈다

    for word in words :  # 공백을 기준으로 나눈 행의 정보를 한 단어씩 확인한다
        print('%s\t%s' %(word, 1))  # 나눈 단어마다 1과 함께 표준출력으로 출력

 

Shuffle 코드 예시)

# Shuffle을 거쳐서 데이터가 정렬되어 Reducer로 전해진다

current_word = None
current_count = 0
word = None

for line in sys.stdin :
	line = line.strip()
    word, count = line.split('\t',1) # split('separator',max_split=-1) 
    
    try :
    	count = int(count)       # 횟수가 숫자인지 
    except ValueError :
    	continue                 # 빈 데이터라면 continue
        
    # shuffle 과정을 거친 데이터는 정렬이 되어있기 때문에
    if current_word == word :    # 단어가 중복이면
    	current_count += count   # 횟수를 더해준다
        
    else :                       
    	if current_word :        # 새로운 단어라면
        	print('%s\t%s' %(current_word, current_count) )  #그 전 단어의 빈도수 출력
    	current_count = count    # 비교기준을 새로운 단어로 지정한다
    	current_word = word      
    
if current_word == word :
	print('%s\t%s' % (current_word, current_count))

 

2. Eco-system (e.g. Hive, HBase, Sqoop, etc.)

- Hive(HiveQL)는 Hadoop의 MapReduce 과정에서 개발자가 좀 더 쉽게 분산 처리를 하도록 도와주는 시스템이다.

- Hive(HiveQL)은 SQL과 비슷한 언어의 모습을 가지고 있다.

- Hive는 내부에서 mapper와 reducer를 생성하여 MapReducer 프레임워크에 자동으로 넣어준다.

 

* Spark (PySpark)

- MapReducer의 상위호환적인 방식으로 근래에는 MapReduce보다 주로 사용되는 방식

- 데이터 처리, 분석 구현 가능

- ML(머신러닝) 구현 가능

- SQL 처리 가능

- In-memory 방식(속도가 매우 빠르다, MapReduce 대비 100배 가량 빠르다고 한다)