본문 바로가기

과목/빅데이터

Hadoop Mapreduce 개요

하둡의 분산 배치 프레임워크


상부는 MapReduce

하부는 Hadoop Distribute File System


상부 하부를 합쳐 하둡.


2004년 구글의 논문 'Mapreduce 대형 클러스터에서의 단순 데이터 처리'

Doug cutting : 오픈 소스 검색 엔진을 만들려고 Nutch 프로젝트를 함.

검색해서 빠르게 접근하기 위해 인덱스 테이블을 잘 만들어야 함. 메타 데이터를 로컬로 가져 와야 함 -> 크롤러. 데이터를 잘 가져와서 검색한 내용을 잘 보여줘야한다. 메타 데이터는 멀쩡하지만 사이트 페이지가 사라지면 404 Error가 뜬다. 컴퓨터를 확장시키기 위해 인덱스 테이블을 매번 만들고 프로그램을 다시 짜야하는 불편이 있다. Doug cutting은 위 논문을 보고 Hadoop을 만듦. Hadoop은 분산 운영체제의 커널이 될 것이다.


하둡을 코어로 한 오픈 소스 프로젝트

Pig, Hive, Hbase, Mahout, Zookeeper


최대 4000대의 컴퓨터까지 사용가능.


세마포어 뮤텍스를 잘못 쓰면 싱글 프로세스가 되어 버린다. 작업을 마냥 기다리는데 작업이 끝나지 않아 계속 기다리는 deadlock이 걸린다.


MapReduce 특징

분산 컴퓨팅에 적합한 함수형 프로그래밍

배치형 데이터 처리 시스템 - 클래스의 집합

자동화된 병렬처리 및 분산처리

Fault-tolerance 결함 허용

상태 및 모니터링 툴 - JVM위에서 동작, 어떤 자원을 사용하는지, 하나의 컴퓨터 즉, 노드를 묶은 클러스터. 어떤 노드에서 어떤 프로세스가 실행되는지 확인

프로그래머스를 위한 추상 클래스


Map이라는 클래스가 동작한 뒤에 그 결과값을 Reduce라는 클래스가 받아서 result를 뽑아낸다.

Map은 데이터가 있는 local에서 동작한다. 일을 나눠서 하고 각각의 결과를 취합하는 일은 Reduce가 한다.


data->Map->Reduce->result


각각의 컴퓨터에 Map을 각각 던진다. 이후 특정 Reduce에게 결과를 던지라고 한다. 데이터가 워낙 많기 때문에 데이터에서 필터링을 하는 것이 비효율적이다. 코어 1개 증가 시 30% 효율 증가 예상. 다른 컴퓨터가 작업을 마칠 때까지 Reduce가 기다려야할 수도 있어서 정비례하지 않는다.


Map task

1. Record reader

 입력 format에 의해 생성된 입력 split을 record로 변환

 텍스트인 경우 줄바꿈, 탭 등이 입력되었을 때 레코드로 나누는 등의 기준이 있어야함.

 하둡에서는 key value라는 튜플 형태로 mapper에게 데이터 전달함. 

 

예제

Word count

어떤 단어가 얼마나 나오는지 체크

10만건의 기사를 정치 경제 사회 문화 카테고리로 자동으로 나누는 MapReduce 프로그램을 작성한다면 기사에 어떤 단어가 많이 나오는지 파악해야 함.

레코드에서 띄어쓰기 단위로 자른다.

key에 단어, value에 숫자 넣고 출력

shuffle 단계에서 같은 키끼리 묶어준다.

같은 키의 묶음을 reduce로 전달해준다.

reduce는 value를 합산하고 출력한다. 


2. Mapper

Record Reader가 전달한 key value 쌍을 처리


3. Combiner

Mapper의 중간 결과값이 많을 수록 성능이 떨어진다. 성능을 높이려면 Mapper의 출력 값이 하나라도 적어야한다. 이 역할을 Combiner가 한다. Reduce를 Map에서 실행한다. car : 1, car : 1이 있다면 car : 2로 만든다. 


Job Tracker는 Map, Reduce,Combiner를 실행하도록 한다.


4. Partitioner

해시 함수(입력에 상관없이 출력 길이가 동일)를 사용해서 문자열을 비트 패턴으로 바꾼다.


5. Output