- MapReduce에 대해
MapReduce는 대용량 데이터를 분산 처리하기위한 모델이다.
Map+Reduce를 합쳐 부르는 것인데
Mapping은 분산된 상태로 저장되어 있는 데이터들을
관련있는 데이터로 묶어 임시적으로 변형이 되는 과정이다.
Reducing는 Mapping에서 변형된 데이터에서 원하는 데이터를 추출하는 과정이다.
MapReduce는 Map과 Reduce만으로 이루어져 있지 않다.
(아래는 Word Counting 에서의 과정 설명)
1.Splitting : 입력한 데이터를 line-by-line으로 읽어들여 (key,value)로 분할
2.Mapping : Map함수를 사용해 문자를 분리하며 단어의 개수를 확인
3.Shuffling : Mapping에서 메모리에 저장된 데이터들을 정렬
4.Reducing : Shuffling에서 중복된 데이터들을 합치면서 수집
5.결과 output
//++Mapper과정(Mapping->Reducing)에서의 메모리 관리
Mapper의 출력데이터는 메모리 버퍼에 저장한후 버퍼가 기준치만큼 차게되면 disk에 작성
Mapper가 끝나기전 disk에 작성된 파일들을 정렬된 한개의 파일로 만들어 Reducer에게 전달
-Hadoop1.0에서의 MapReduce구성
클라이언트가 MapReduce Job을 JobTracker에게 보냄
Master인 JobTracker는 클러스터의 하위노드들에게 Task를 할당
이 노드들은 TaskTracker라는 소프트웨어 Daemon에 의해 각각 실행
TaskTracker는 실제로 Task를 인스턴스화하고 JobTracker에게 현황 보고
////이때 Job이 위에서 말한 MapReduce과정의 단위
JobTracker는 전체 Job의 스케줄링을 관리,모니터링하면서
동시에 Job을 받아 Task를 어떻게 할당할지 결정하고
할당을 하는 역할까지 한다. +하위노드 TaskTracker에서는 지속적으로 현황보고
->>>MapReduce에서 너무 많은 일을 하게되어 개선이 필요했다
(메모리 할당 문제,리소스 관리 문제,지원api 문제등등 부작용이 많았다 ex. bottleneck병목현상)
(->>>Hadoop2.0에서 Yarn 탄생)
(->>>MapReduce 경량화)
(->>>Hadoop에서 다른 작업도 처리가능하게 됨)
-Hadoop2.0에서의 Yarn구성
위에서 말한 문제들을 해결하기 위해
클러스터 리소스관리와 애플리케이션 라이프 사이클 관리를 따로 분리하여 Yarn을 개발해
Hadoop2.0 페이즈를 시작
->>>ResourceManager,NodeManager 컴포넌트,라이프 사이클관리 위주의 ApplicationMaster,지원하는 데이터 처리 api를 한정하지 않고 다양한 api를 수용해 처리가능
-ResourceManager란?
Yarn의 Master 서버로메인 역할은 클러스터 리소스관리(최적의 데이터노드를 찾아준다)전체클러스터에서 사용가능한 모든 시스템 자원을 관리한다만약 프로그램에서 리소스를 요청했다면 최적으로 분배하고리소스 사용현황을 모니터링한다.
-NodeManager란?
Yarn의 Worker서버로 ResourceManager의 하위노드컨테이너를 실행시키고 컨테이너의 라이프 사이클을 모니터링한다
////컨테이너란 TaskTracker의 Task단위와 같은 NodeManager의 단위(CPU,메모리,디스크,네트워크등의 리소스 포함)
당연히 현황보고를 위해 ResourceManager에게 heartbeat 전송
////문제 발생시 ResourceManager가 Container를 Kill하라는 명령을 내린다
****위 두 서버는 외부에서 특별한 요청이 없다면 아무런 동작을 수행하지 않으며 NodeManager는 자신의 상태만 계속해서 ResourceManager로 보내고 ResourceManager는 클러스터의 전체 리소스 상황에 대한 현황 관리만 수행한다****
->>>클러스터 기반 시스템인 Yarn은 혼자서는 하는일이 없고 MapReduce나 Spark와 같은 분산 컴퓨팅 플랫폼이나 HBase등과 같이 분산된 환경에서의 컴퓨팅 리소스(CPU, 메모리 등)가 필요하다.
- ApplicationMaster란?
하나의 application을 관리하는 Master서버
각각의 단일 작업은 고유한 ApplicationMaster를 가진다
클러스터에서 실행을 조정하고 오류를 관리하며
Task를 모니터링하고 실행하기 위해 NodeManager와 함께 작동하고
ResourceManager와 함께 자원을 협상하여
적당한 리소스를 할당받아 라이프 사이클을 모니터링
주기적으로 ResourceManager에 heartbeats를 전송하며 리소스 요구사항을 갱신한다