최초 작성일 : 2013/03/20 12:16 


Status Information

master는 내부에 HTTP 서버를 실행시켜 사용자가 볼 수 있도록 일련의 상태 정보 페이지를
출력한다. 이 상태 페이지는 얼마나 많은 task가 완료 되었는지, 얼마나 많은 task가 수행 중인지,
입력 바이트 수, 중간 데이터의 바이트 수, 출력 바이트 수, 처리율 등의 연산 수행에 대한
진행 상태를 보여준다.

또한 이 페이지에는 표준 에러나 각각의 task에서 생성한 표준 출력 파일에 대한 링크도 제공한다.

사용자들은 이러한 데이터통해 연산이 얼마나 걸릴 지, 연산에 추가 리소스가 필요한지 예측할 수 있다.
이 페이지들은 또한 예상했던 것 보다 더 느려지는 지점을 밝혀내는 데도 사용할 수 있다.

추가적으로 상위의 상태 페이지는 어떤 작업자가 실패했는지, 그리고 그 실패 시점에 어떤 map과
reduce task들이 수행되고 있는지를 보여준다. 이 정보는 사용자 코드에서 버그 진단을 시도할 때
유용하다.

Counter

MapReduce 라이브러리는 현재 발생한 다양한 이벤트를 카운트하기 위해 카운터 장치를 제공하고 있다.
예를들면 사용자 코드가 작성된 모든 단어의 수를 알고자 할 경우도 있고 색인화 된 독일어 문서의 수를
찾고자 할 수도 있다.

이 카운터 장치를 이용하게 되면 사용자 코드는 이름이 붙은 카운터 객체를 생성하게 되고
Map과(또는) Reduce 함수 내에서 적절하게 카운터를 증가시키게 된다.

다음은 그 예이다.

Counter* uppercase;
  uppercase = GetCounter("uppercase");
map(String name, String contents): for each word w in contents:
      if (IsCapitalized(w)):
        uppercase->Increment();
      EmitIntermediate(w, "1");

개별적인 작업자 머신으로부터 생성된 카운터 값은 주기적으로 master에게 전송한다
(이 전송은 ping에 대한 응답에 같이 실려간다). master는 성곡적으로 수행된
map과 reduce task들로부터 전송된 카운터 값들의 총합을 계산하여 MapReduce 수행이
완료되면 사용자 코드에 그 값을 리턴해준다.

현재의 카운터 값들은 master의 상태 페이지에 표시되고 사용자는 그 것을 통해 현재 살아있는
프로세스들의 진행 상태를 볼 수 있다. 카운터 값들을 합산할 때 master는 중복해서 카운팅하는
것을 피하기 위해 같은 map 또는 reduce task에서의 중복된 수행들을 제거한다.
(중복 수행은 백업 task라든지 실패에 의한 재시작 등을 사용할 때 발생한다)

수행된 입력 key/value쌍들이나 생성된 출력 key/value쌍들의 수 처럼 어떤 카운터 값들은
MapReduce 라이브러리에 의해 자동으로 관리된다.

어떤 MapReduce 수행에서는 사용자의 코드가 입력쌍과 출력쌍의 수가 정확히 일치할 것을
보장받길 원하고, 혹은 독일어 문서의 일부분에 대한 처리가 전체 문서 처리의 허용된 범위 내에
있기를 원할 수도 있기 때문에 사용자들은 카운터 장치가 MapReduce 수행 동작이 정상적인지를
확인하는 데 유용하다는 것을 알 수 있을 것이다.

블로그 이미지

마즈다

이제 반백이 되었지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

댓글을 달아 주세요