2011-12-16 6 views
0

내 질문은이 게시물 Sorting large data using MapReduce/Hadoop과 관련이 있습니다. 임의로 설정 한 정렬의 내 생각은 다음과 같습니다 Hadoop을 사용하여 임의로 큰 데이터 세트를 정렬하는 방법은 무엇입니까?

  1. 우리는 기록에 큰 파일을 가지고, 10^9 기록을 말한다.
  2. 파일이 M 매퍼로 분할됩니다. 각 매퍼는 크기의 분할 즉, QuickSort를 사용하여 10000 개의 레코드를 정렬하고 정렬 된 하위 시퀀스를 출력합니다. 출력 키의 범위는 1과 R 사이이며, 여기서 R은 감속기 태스크 수입니다 (R = 4라고 가정). 값은 정렬 된 서브 시퀀스입니다.
  3. 각 감속기는 K 개의 하위 시퀀스를 읽고 병합합니다 (하위 시퀀스가 ​​비어있을 때까지 하위 시퀀스에서 가장 작은 요소를 반복적으로 취함). 출력은 파일에 기록됩니다.

그런 다음 처리가 수행됩니다

데이터의 지역성을 활용하려면, 새 감속기 작업은 이전 감속기 작업에 의해 생성 된 여러 개의 출력 파일을 병합하도록 예약 할 수 있습니다. 예를 들어, K = 5 일 경우 첫 번째 감속기 작업은 50000 크기의 파일을 생성하고 새로운 감속기 작업은 5 개의 50000 개의 정렬 된 레코드로 이루어진 파일로 작업합니다. 새 감속기 작업은 하나의 파일 만 남을 때까지 예약되며이 경우 250,000,000입니다 (R = 4이므로). 마지막으로 새로운 감속기 작업이 하나의 10^9 파일

내 질문로 파일을 병합하는 다른 컴퓨터에 예약 할 것입니다 : 그들은 병합하는 방식으로 감속기 작업의 실행을 예약하기 위해 하둡에서 가능하다 1 개의 파일 만 남아있을 때까지 몇몇 전화 번호부에있는 파일? 그렇다면 어떻게?

또 다른 시나리오는 각 병합 단계 후에 MapReduce 작업을 예약하는 것이므로 다른 시스템에서 실행중인 작업을 줄여서 50000 크기의 파일을 병합 한 다음 다른 컴퓨터에서 크기를 250.000으로 파일을 병합합니다 그러나 이것은 많은 네트워크 트래픽을 생성합니다. 어떤 경우에도이 경우에도 문제가 남아 있습니다 - 결과를 하나만 출력 한 후에 연결이 중지되도록 여러 MapReduce 작업을 연결하는 방법?

+0

오버 헤드가 없으며 모든 것을 처리해 주므로 실제로 최적입니다. 그들은 terasort 벤치 마크를 획득했습니다. –

답변

관련 문제