병렬 분산 알고리즘 사용이유
- Scale-out
- Scale-up
- 데이터 중심 어플리케이션 분야에서는 아주 많은 값싼 서버를 많이 이용한다.
- 고가의 서버들은 가격에 관점에서는 선형으로 성능이 증가하지 않기 때문에 값싼 서버 여러개가 가격측면에서 좋다.
맵리듀스 프레임워크
- 데이터 중심 프로세싱
- 한대의 컴퓨터 능력으로 처리가 어렵다
- 수천대의 커뮤터를 묶어 처리해야한다
- 맵리듀스 프레임워크가 하는 것이 위 처리이다.
- 맵리듀스는 빅데이터를 이용한 효율적인 계산이 가능한 첫 번째 프로그래밍 모델
- 기존에 존재하는 여러 가지 다른 병렬 컴퓨팅 방법에서는 프로그래먹 낮은 레벨의 시스템 세부 내용까지 아주 잘 알고 많은 시간을 쏟아야만 함
- 빅데이터를 이용하는 응용분야에서 최근 주목
- Scale-out으로 클러스터를 만들고 여기에 빅 데이터를 처리하기 위한 스케이러블 병렬 소프트웨어의 구현을 쉽게 할 수 있도록 도와주는 간단한 프로그래밍 모델이다.
- 스케이러블 - 사용자 수가 급증 or 데이터가 급증 해도 유연하게 처리해준다(성능이 안느려진다)
- 구글의 맵리듀스 or 오픈소스인 하둡은 맵리듀스 프레임워크의 우수한 구현의 형태이다.
- 드라이버에 해당하는 메인 함수가 맵 함수와 리듀스 함수를 호출해서 처리한다.
맵리듀스 페이즈(3단계 구성)
- 맵 페이즈
- 제일 먼저 수행됨, 데이터의 여러 파티션에 병렬 분산으로 호출되 수행
- 각 머신마다 수행된 Mapper는 맵 함수가 입력 데이터의 한 줄 마다 맵 함수 호출
- 맵 함수는 (키, 벨류)의 쌍 형태로 결과 출력, 여러 머신에 나누어 보내며 같은 키를 가진 쌍은 같은 머신으로 보낸다.
- 셔플링 페이즈
- 모든 머신에서 맵페이즈가 다 끝나면 시작된다.
- 맵 페이즈에서 각각의 머신으로 보내진 쌍을 키를 이용해서 정렬 한 후, 각 키 마다 같은 키를 가진 쌍을 모아 벨류-리스트(Value-list)를 만든 다음(key, value-list)형태로 key에 따라 여러 머신에 분산해 보낸다.
- 리듀스 페이즈
- 모든 머신에서 셔플링 페이즈가 다 끝나면 각 머신마다 리듀스 페이즈가 시작
- 각 머신에서 셔플링 페이즈에서 해당 머신으로 보내진 각각(key, value-list) 상 마다 리듀스 함수가 호출, 하나의 리듀스 함수가 끝나면 다음(key, value-list)쌍에 리듀스 함수가 호출된다.
- 출력이 있다면(key, value) 쌍 형태로 출력
Hadoop
- Apache 프로젝트의 맵리듀스 프레임워크의 오픈 소스
- 하둡 분산 파일 시스템(하둡 디스트리뷰트 파일 시스템 - HDFS)
- 빅데이터 파일을 여러 대의 컴퓨터에 나누어서 저장함
- 각 파일은 여러 개의 순차적인 블록으로 저장함
- 하나의 파일의 각각의 블록은 폴트 톨러런스를 위해서 여러 개로 복사 되어 여러 머신의 여기저기 저장됨
- 폴트 톨러런스 : 시스템 구성 부품 일부에서 결함 or 고장이 발생해도 정상적 또는 부분적으로 기능을 수행할수 있는 것을 말함
- 빅데이터를 수천대의 값싼 컴퓨터에 병렬 처리하기 위해 분산함.
- 주요 구성 요소들
- MapReduce(맵리듀스) - 소프트웨어의 수행을 분산함
- Hadoop Distribute File System(HDFS) - epdlxjfmf qnstksgka
- 한 개의 Namenode(master)와 여러 개의 Datanode(slaves)
- Namenode
- 파일 시스템을 관리하고 클라이언트가 파일에 접근할 수 있게 함.
- Datanode
- 컴퓨터에 들어있는 데이터를 접근 할 수 있게함.
- 자바 프로그래밍 언어로 맵리듀스 알고리즘 구현
MapReduce의 함수
- 맵 함수
- org.apache.jaddop.mpareduce라는 패키지에 있는 Mapper 클래스를 상속받아서 맵 메소드(method)를 수정한다.
- 입력 텍스트 파일에서 라인 단위로 호출되고 입력은 키-벨류(Key,Value-List)의 형태
- key는 입력 텍스트 파일에서 맨 앞 문자를 기준으로 맵 함수가 호출된 해당 라인의 첫 번째 문자까지의 오프셋
- value는 텍스트의 해당 라인 전체가 들어있다.
- 리듀스 함수
- org.apacje.hadoop.mapreduce라는 패키지에 있는 reducer 클래스를 상속받아 reduce 메소드를 수정한다.
- 셔플링 페이즈의 출력을 입력으로 받는데 키-벨류의 형태
- Value-list는 맵 함수의 출력에서 키를 갖는 키, 벨류 쌍들의 벨류들의 리스트
- 컴바인 함수
- 리듀스 함수와 유사한 함수임, 각 머신에서 맵 페이즈에서 맵 함수의 출력 크기를 줄여서 셔플링 페이즈와 리듀스 페이즈의 비용을 줄여주는데 사용된다.