[sorting] Map Reduce Programming의 감속기에서 셔플 링 및 정렬 단계의 목적은 무엇입니까?

Map Reduce 프로그래밍에서 감소 단계에는 하위 부분으로 셔플 링, 정렬 및 감소가 있습니다. 정렬은 비용이 많이 드는 일입니다.

Map Reduce Programming의 감속기에서 셔플 링 및 정렬 단계의 목적은 무엇입니까?



답변

먼저 shuffling매퍼에서 리듀서로 데이터를 전송하는 과정이므로 리듀서에 필요한 것이 분명하다고 생각합니다. 그렇지 않으면 입력 (또는 모든 매퍼의 입력)을 가질 수 없기 때문입니다. . 시간을 절약하기 위해지도 단계가 완료되기 전에 셔플 링을 시작할 수 있습니다. 그렇기 때문에지도 상태가 아직 100 %가 아닌 경우 감소 상태가 0 %보다 크지 만 (33 % 미만) 볼 수 있습니다.

Sorting감속기의 시간을 절약하여 새로운 감속 작업이 시작되어야하는시기를 쉽게 구별 할 수 있습니다. 정렬 된 입력 데이터의 다음 키가 이전 키와 다를 때 간단히 새 축소 작업을 시작합니다. 각각의 축소 작업은 키-값 쌍의 목록을 가져 오지만 키-목록 (값) 입력을받는 reduce () 메서드를 호출해야하므로 키별로 값을 그룹화해야합니다. 입력 데이터가 맵 단계에서 (로컬로) 미리 정렬되고 축소 단계에서 단순히 병합 정렬 된 경우 (리듀서가 많은 매퍼로부터 데이터를 가져 오기 때문에) 그렇게하기 쉽습니다.

Partitioning답변 중 하나에서 언급 한은 다른 프로세스입니다. 지도 단계의 출력 인 (키, 값) 쌍이 전송 될 감속기를 결정합니다. 기본 파티션 도구는 키에 해싱을 사용하여 축소 작업에 배포하지만이를 재정의하고 사용자 지정 파티션 도구를 사용할 수 있습니다.

이러한 단계에 대한 훌륭한 정보 소스는이 Yahoo 자습서 입니다.

이에 대한 멋진 그래픽 표현은 다음과 같습니다 (이 그림에서는 셔플을 “복사”라고 함).

여기에 이미지 설명 입력

shufflingsorting당신이 제로 감속기를 지정하면 전혀 수행되지 않습니다 (setNumReduceTasks (0)). 그런 다음 MapReduce 작업이지도 단계에서 중지되고지도 단계에는 어떤 종류의 정렬도 포함되지 않으므로지도 단계도 더 빠릅니다.

업데이트 : 더 공식적인 것을 찾고 있기 때문에 Tom White의 책 “Hadoop : The Definitive Guide”를 읽을 수도 있습니다. 여기 에 귀하의 질문에 대한 흥미로운 부분이 있습니다.
Tom White는 2007 년 2 월부터 Apache Hadoop 커미터로 활동하고 있으며 Apache Software Foundation의 회원이므로 꽤 신뢰할 수 있고 공식적인 것 같습니다.


답변

Mapreduce 프로그램의 주요 단계를 다시 살펴 보겠습니다.

지도 단계는 매퍼에 의해 이루어집니다. 매퍼 는 정렬되지 않은 입력 키 / 값 쌍에서 실행됩니다. 각 매퍼는 각 입력 키 / 값 쌍에 대해 0 개, 1 개 또는 여러 개의 출력 키 / 값 쌍을 내 보냅니다.

결합 단계는 결합 장치에 의해 수행된다. 결합기는 동일한 키와 키 / 값 쌍을 결합해야한다. 각 결합기는 0 번, 1 번 또는 여러 번 실행할 수 있습니다.

셔플 및 분류 단계는 프레임 워크에 의해 수행된다. 모든 매퍼의 데이터는 키별로 그룹화되고 리듀서로 분할되며 키별로 정렬됩니다. 각 감속기는 동일한 키와 관련된 모든 값을 얻습니다. 프로그래머는 정렬을위한 사용자 지정 비교 함수와 데이터 분할을위한 파티 셔 너를 제공 할 수 있습니다 .

파티션 프로그램은 감속기가 특정 키 값 쌍을 얻을 것이다 결정합니다.

감속기 얻은, 키 / [값리스트] 쌍이 정렬 키로 정렬. 값 목록에는 매퍼가 생성 한 동일한 키를 가진 모든 값이 포함됩니다. 각 감속기는 각 입력 키 / 값 쌍에 대해 0 개, 1 개 또는 여러 개의 출력 키 / 값 쌍을 방출합니다 .

이 javacodegeeks를 한 번 봐 가지고 기사 마리아 Jurcovicova로하고 mssqltips 더 나은 이해를 위해 다타에 의해 기사

아래는 safaribooksonline 기사 의 이미지입니다.

여기에 이미지 설명 입력


답변

위의 답변에서 누락 된 몇 가지 점을 추가하려고 생각했습니다. 여기 에서 가져온이 다이어그램 은 실제로 무슨 일이 일어나고 있는지 명확하게 나타냅니다.

여기에 이미지 설명 입력

진짜 목적을 다시 말하면

  • 분할 : 처리 부하를 여러 노드 (매퍼)에 분산하여 병렬 처리를 개선하여 전체 처리 시간을 절약합니다.

  • 결합 : 각 매퍼의 출력을 축소합니다. 데이터를 한 노드에서 다른 노드로 이동하는 데 소요되는 시간을 절약 할 수 있습니다.

  • 정렬 (셔플 및 정렬) : 런타임에서 새 감속기를 쉽게 예약 (생성 / 시작) 할 수 있습니다. 정렬 된 항목 목록을 살펴 보는 동안 현재 키가 이전 키와 다를 때마다 새 감속기를 생성 할 수 있습니다. .


답변

일부 데이터 처리 요구 사항은 정렬이 전혀 필요하지 않습니다. Syncsort는 Hadoop의 정렬을 플러그 가능하게 만들었습니다. 여기에 정렬에 그들로부터 좋은 블로그입니다. 매퍼에서 감속기로 데이터를 이동하는 과정을 셔플 링이라고 합니다. 이에 대한 자세한 내용은 문서를 확인 하세요 .


답변

매퍼의 출력이 감속기에 대한 입력이므로 항상 이것이 필요하다고 생각했습니다. 따라서 키 스페이스를 기준으로 정렬 한 다음 각 감속기 입력에 대해 버킷으로 분할했습니다. 키의 모든 동일한 값이 동일한 버킷에 들어가 감속기로 이동하여 함께 감소되도록해야합니다. K1, V2 및 K1, V4를 다른 감속기로 보낼 필요가 없습니다. 줄이기 위해 함께 있어야하기 때문입니다.

가능한 한 간단하게 설명해 보았습니다.


답변

셔플 링은 매퍼의 중간 데이터가 0,1 이상의 감속기로 전송되는 프로세스입니다. 각 감속기는 감속기 수에 따라 하나 이상의 키와 관련 값을받습니다 (균형 부하의 경우). 또한 각 키와 관련된 값이 로컬로 정렬됩니다.


답변

MapReduce가 기본적으로 수행하는 작업은 정렬 및 (정렬로 구현 됨) 확장 가능한 GroupBy입니다.

MapReduce를 통한 대부분의 애플리케이션 및 디자인 패턴은 셔플 및 정렬로 제공되는이 두 작업을 통해 빌드됩니다.