본문 바로가기

데이터 사이언스

[Hadoop] MapReduce 기본개념, 정의, 특징, MapReduce 1.0

1. MapReduce

  •  프로그래밍 패러다임
  • 하나의 문제를 풀기 위해 설계되었다.
  • 구글이 만들었다.
  • 두 개의 부분으로 나뉨. (Map part, Reduce part)

 

2. Map 파트

  • 데이터에 Map() 함수를 실행시킨다.
  • 각 노드를 실행시킨다. (each node)
  • 각 노드에 <key, value> 쌍의 결과가 나온다.

 

3. Reduce 파트

  • 데이터에 Reduce() 함수를 실행시킨다.
  • 어떤 노드에 실행시킨다. (some node)
  • 어떤 노드에 <key, value>쌍을 종합한다.
  • 결과 : 합쳐진 리스트

 

4. 간단히 그림으로 이해하기

 

간단설명

예를 들어 3개의 서로 다른 Map Machine에 서른 다른 크기의 데이터가 들어간 모습이다.

데이터들이 Shuffle 되고, 같은 크기의 데이터로 Sort 되고, Reduce에서 데이터들이 합쳐진다.

(실제로는 50~100개의 노드를 가짐)

Shuffle이랑 sort는 복잡하지만, Map Reduce에 중요한 부분이다. 

 

그림1. MapReduce 그림으로 보기


5. MapReduce 1.0

  • Distributed(분산되어 있고), Scalble(확장성 있고), chear (싸다)
  • 저장
    • HDFS - triple replicated (3개 복사)
    • 양산형 하드웨어에서 돌아간다.
  • 처리
    • Map(local)와 Reduce(aggregated)를 병렬 수행한다.

 

6. 코딩 스텝

  • class를 만든다.
  • static Map class을 만든다.
  • static Reduce class을 만든다.
  • Main function을 만든다.
    • (job)일을 만든다
    • (job)일은 Map과 Reduce 클래스는 호출한다.

 

7. pseduo MapReuce Java 코드

 

public class MapReduce{
	public static void Main(String[] args)
    {
       //create JobRunnerInstance
       //call MapInstance on JobInstance
       //call ReduceInstance on JobInstance
    }
    
    public void Map()
    {
    	//write Mapper
    }
    
    public void Reduce()
    {
        //write Reducer
    }
}

 

8. MapReduce의 주요 관점

Api거나 라이브러리의 모음이다.

Job : MapReduce의 work/instance의 단위다.

Map task : 각 노드에서 실행된다.

Reduce task : 어떤 노드에서 실행된다.

Source data : HDFS이거나 다른 위치의 소스파일

 

9. MapReduce 데몬(daemon)과 서비스(Services)

  • JVM, 서비스 : 프로세스 격리(isolated processes)
    • Job tracker - one (controller과 scheduler)
    • Task tracker - 클러스터당 1개 (task를 관리)
  • Job configuration
    • job instances를 위해 input/out 위치를 알려준다.
    • job client는 실행을 위해 job을 준다.

 

10. MapReduce 코딩 스타일

  • 표준 : 보통 Java를 이용
  • Hadoop Streaming : Java Base
    • mapper/reducer 코드는 다른 언어 사용 가능
  • Hadoop Pipes : C++를 사용

 

11. MapReduce Job 실행결과(Output)

  • 성공(Success)
  • 텍스트 파일의 시리즈들
  • HDFS에 저장되어 있다면 불변이다.(immutable)
  • 각 실행은 새로운 파일 이름을 필요로 한다.
  • 고유함(Uniqueness)를 위해 파일 이름에 run time을 추가한다.

 

 

참고문헌(Reference)

linkedIn Learning Hadoop / Lynn Langit