최초 작성일 : 2013/03/26 12:54


Performance

이번 장에서는 대규모 클러스터에서 돌아가는 2개의 연산에 대한 MapReduce의 성능을
측정해 볼 것이다.

연산 중 하나는 약 1테라바이트 크기의 데이터로부터 특정 패턴을 검색하는 연산이고
다른 하나는 약 1테라바이트 크기의 데이터를 정렬하는 연산이다.
이 두 프로그램은 MapReduce 사용자가 작성한 실제 프로그램으로부터 구현한 큰 규모의
서브셋이다. 프로그램들을 구성하는 클래스 하나는 어떤 위치로부터 다른 위치로 재구성을
수행하고 다른 클래스는 커다란 데이터 덩어리에서 관심있는 적은 양의 데이터를 추출한다.


Cluster Configuration

모든 프로그램들은 약 1800대의 머신으로 구성된 클러스터상에서 실행된다.
각가의 머신은 하이퍼스레딩이 가능한 2Ghz의 제온 프로세서 2개와 4Gb의 메모,
그리고 2개의 160Gb의 IDE 하드 디스크를 가지고 있으며 기가비트 이더넷으로
연결되어있다.

이 머신들은 총 100~200Gbps의 대역폭을 갖는 스위칭 네트워크 내에 2단계의
트리 구조로 배치가 되어있다. 모든 머신들은 동일한 호스팅 시설 내에 있기 때문에
한 쌍의 머신들 사이에서 데이터 왕복 시간은 1/1000초보다도 작다.
총 4Gb의 메모리 중 약 1~1.5Gb는 클러스터상의 다른 task 수행을 위해 예약되어있다.

프로그램들은 CPU와 디스크와 네트워크의 대부분이 idle 상태인 주말 오후에 실행이 되었다.


Grep
 
비교적 드물게 나타나는 3음절 패턴을 검색하기 위해 grep 프로그램은
100바이트의 레코드들을 10의 10승만큼 스캔한다(3음절 패턴은 92,337개의
레코드에서 발견되었다).
입력은 대략 64Mb의 조각(M = 15000)으로 나뉘고 전체 출력은 하나의 파일에
저장된다(R = 1).



Figure 2는 전체 시간동안의 연산 과정을 보여준다.
Y축은 입력 데이터의 스캔률을 보여준다.

더 많은 머신들에 이 MapReduce 연산이 할당될 수록 스캔률은 서서히 증가한다.
그리고나서 1764개의 작업자가 할당되었을 때 최고점은 30 GB/s를 넘어섰다.
map task가 끝나면서 스캔률은 떨어지기 시작하고 연산 수행 시간이 80초 정도 되었을 때 0이 되었다.

전체 연산 수행 시간은 시작에서 종료까지 약 150초가 걸렸다.
이 150초에는 약 1분 정도의 초기 구동에 대한 부하가 포함되어있다.
이 부하는 모든 작업자 머신에 프로그램을 전달하는 것과 1000개의 입력 파일을
열기 위해 GFS(Google File System)과 통신하는 데 발생하는 지연, 그리고
로컬 디스크의 최적화를 위해 필요한 정보를 수집하는데 발생한 것이다.

블로그 이미지

마즈다

이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^