복붙노트

[HADOOP] Map Reduce Programming의 감속기에서 단계를 셔플하고 정렬하는 목적은 무엇입니까?

HADOOP

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

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

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

해결법

  1. ==============================

    1.우선 매 셔플 링은 매퍼에서 감속기로 데이터를 전송하는 프로세스이므로 감속기에는 필수적이라는 것이 분명합니다. 그렇지 않으면 입력 (또는 모든 매퍼에서 입력 할 수 없기 때문입니다. ). 지도 단계가 완료되기 전에 셔플 링을 시작하여 시간을 절약 할 수 있습니다. 따라서지도 상태가 아직 100 %가 아닐 때 0 % (그러나 33 % 미만)의 감소 상태를 볼 수 있습니다.

    우선 매 셔플 링은 매퍼에서 감속기로 데이터를 전송하는 프로세스이므로 감속기에는 필수적이라는 것이 분명합니다. 그렇지 않으면 입력 (또는 모든 매퍼에서 입력 할 수 없기 때문입니다. ). 지도 단계가 완료되기 전에 셔플 링을 시작하여 시간을 절약 할 수 있습니다. 따라서지도 상태가 아직 100 %가 아닐 때 0 % (그러나 33 % 미만)의 감소 상태를 볼 수 있습니다.

    정렬은 감속기의 시간을 절약 해 주므로 새 감속 작업을 언제 시작해야하는지 쉽게 구분할 수 있습니다. 정렬 된 입력 데이터의 다음 키가 이전과 다르면 간단하게 새 reduce 작업을 시작합니다. 각 reduce 작업은 키 - 값 쌍의 목록을 취하지 만 키 - 목록 (값) 입력을받는 reduce () 메서드를 호출해야하므로 키별로 값을 그룹화해야합니다. 입력 데이터가 맵 단계에서 사전 정렬 (로컬)되고 감속기가 많은 맵퍼에서 데이터를 얻으므로 감축 단계에서 단순히 병합 정렬하면 쉽게 수행 할 수 있습니다.

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

    이러한 단계에 대한 정보의 위대한 소스는이 야후 자습서입니다.

    이것에 대한 훌륭한 그래픽 표현은 다음과 같습니다 (이 그림에서 셔플을 "복사"라고 함).

    제로 감속기 (setNumReduceTasks (0))를 지정하면 셔플 및 정렬이 전혀 수행되지 않습니다. 그런 다음 MapReduce 작업은 맵 단계에서 중지되고 맵 단계에는 정렬이 포함되지 않습니다 (따라서 맵 단계조차도 더 빠름).

    업데이트 : 당신이 뭔가 더 공식적인 것을 찾고 있기 때문에 Tom White의 책 "Hadoop : The Definitive Guide"도 읽을 수 있습니다. 당신의 질문에 흥미로운 부분이 있습니다. Tom White는 2007 년 2 월부터 Apache Hadoop 커미터로 근무했으며 Apache Software Foundation의 멤버이기 때문에 꽤 신뢰할 만하고 공식적이라고 생각합니다.

  2. ==============================

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

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

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

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

    셔플 및 정렬 단계는 프레임 워크에 의해 수행됩니다. 모든 맵퍼의 데이터는 키에 의해 그룹화되고 감속기로 나누어 져 키순으로 정렬됩니다. 각 감속기는 동일한 키와 연관된 모든 값을 얻습니다. 프로그래머는 정렬을 위해 사용자 정의 비교 함수를 제공하고 데이터 분할을 위해 분할자를 제공 할 수 있습니다.

    분할자는 어떤 감속기가 특정 키 값 쌍을 가져올 지 결정합니다.

    감속기는 정렬 된 키 / [값 목록] 쌍을 키순으로 정렬하여 얻습니다. 값 목록에는 매퍼가 생성 한 동일한 키를 가진 모든 값이 포함됩니다. 각 감속기는 각 입력 키 / 값 쌍에 대해 0 개, 하나 또는 여러 개의 출력 키 / 값 쌍을 내 보냅니다.

    Maria Jurcovicova의 javacodegeeks 기사와 Datta의 mssqltips 기사를 살펴보고 더 나은 이해를 얻으십시오.

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

  3. ==============================

    3.위의 답변에 누락 된 점 몇 개를 추가하는 방법을 생각했습니다. 여기에서 가져온이 다이어그램은 실제로 진행되고있는 것을 명확하게 설명합니다.

    위의 답변에 누락 된 점 몇 개를 추가하는 방법을 생각했습니다. 여기에서 가져온이 다이어그램은 실제로 진행되고있는 것을 명확하게 설명합니다.

    내가 다시 진술하면

  4. ==============================

    4.일부 데이터 처리 요구 사항은 정렬을 전혀 필요로하지 않습니다. Syncsort는 Hadoop을 Pluggable 방식으로 정렬했습니다. 여기에 정렬에서 그들로부터 좋은 블로그입니다. 매퍼에서 감속기로 데이터를 이동하는 과정을 셔플 링 (shuffling)이라고하며이 기사에서 동일한 정보를 확인하십시오.

    일부 데이터 처리 요구 사항은 정렬을 전혀 필요로하지 않습니다. Syncsort는 Hadoop을 Pluggable 방식으로 정렬했습니다. 여기에 정렬에서 그들로부터 좋은 블로그입니다. 매퍼에서 감속기로 데이터를 이동하는 과정을 셔플 링 (shuffling)이라고하며이 기사에서 동일한 정보를 확인하십시오.

  5. ==============================

    5.매퍼의 출력이 감속기의 입력이므로 키 공간을 기준으로 정렬 된 다음 각 감속기 입력에 대한 버킷으로 분할되었습니다. 키의 모든 동일한 값이 감속기로가는 동일한 버킷에서 끝나기를 원합니다. 이렇게 함께 감축됩니다. K1, V2 및 K1, V4를 서로 다른 감속기로 보내는 것은 아무런 의미가 없습니다. 감속기를 함께 사용해야 만 감속 될 수 있습니다.

    매퍼의 출력이 감속기의 입력이므로 키 공간을 기준으로 정렬 된 다음 각 감속기 입력에 대한 버킷으로 분할되었습니다. 키의 모든 동일한 값이 감속기로가는 동일한 버킷에서 끝나기를 원합니다. 이렇게 함께 감축됩니다. K1, V2 및 K1, V4를 서로 다른 감속기로 보내는 것은 아무런 의미가 없습니다. 감속기를 함께 사용해야 만 감속 될 수 있습니다.

    가능한 한 간단하게 설명하려고했습니다.

  6. ==============================

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

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

  7. ==============================

    7.MapReduce는 확장 가능한 GroupBy 정렬 및 (정렬별로 구현 된) MapBase 만 두 가지합니다.

    MapReduce는 확장 가능한 GroupBy 정렬 및 (정렬별로 구현 된) MapBase 만 두 가지합니다.

    MapReduce상의 대부분의 애플리케이션 및 디자인 패턴은 셔플 및 정렬에 의해 제공되는이 두 가지 작업을 기반으로 구축됩니다.

  8. ==============================

    8.이것은 좋은 읽을 거리입니다. 희망이 도움이됩니다. 당신이 정렬에 관해서는, 나는 그것이지도의 마지막 단계에서 병합 작업을위한 것이라고 생각합니다. 맵 작업이 완료되고 결과를 로컬 디스크에 기록해야 할 경우 버퍼에서 생성 된 스플릿에 대해 다중 병합이 수행됩니다. 또한 병합 작업의 경우 각 파티션을 고급으로 정렬하면 도움이됩니다.

    이것은 좋은 읽을 거리입니다. 희망이 도움이됩니다. 당신이 정렬에 관해서는, 나는 그것이지도의 마지막 단계에서 병합 작업을위한 것이라고 생각합니다. 맵 작업이 완료되고 결과를 로컬 디스크에 기록해야 할 경우 버퍼에서 생성 된 스플릿에 대해 다중 병합이 수행됩니다. 또한 병합 작업의 경우 각 파티션을 고급으로 정렬하면 도움이됩니다.

  9. ==============================

    9.잘, Mapreduce에서는 Mapper와 reducer라는 두 가지 중요한 문구가 모두 중요하지만 감속기는 필수 항목입니다. 일부 프로그램에서는 감속기가 선택 사항입니다. 이제 귀하의 질문에 오십시오. 셔플 링 및 정렬은 Mapreduce의 두 가지 중요한 작업입니다. 첫 번째 Hadoop 프레임 워크는 구조화 / 비 구조화 된 데이터를 가져와 Key, Value로 분리합니다.

    잘, Mapreduce에서는 Mapper와 reducer라는 두 가지 중요한 문구가 모두 중요하지만 감속기는 필수 항목입니다. 일부 프로그램에서는 감속기가 선택 사항입니다. 이제 귀하의 질문에 오십시오. 셔플 링 및 정렬은 Mapreduce의 두 가지 중요한 작업입니다. 첫 번째 Hadoop 프레임 워크는 구조화 / 비 구조화 된 데이터를 가져와 Key, Value로 분리합니다.

    이제 Mapper 프로그램은 데이터를 분리하여 처리 할 키와 값으로 정렬합니다. 키 2 및 값 2 값을 생성하십시오. 이 값은 원하는 솔루션을 얻을 수 있도록 적절한 순서로 처리하고 정렬해야합니다. 이제이 셔플 및 정렬은 로컬 시스템 (프레임 워크는주의)에서 완료되고 로컬 시스템의 프로세스 프레임 워크 정리 후 로컬 시스템에서 처리됩니다. 승인

    여기서 우리는 결합기와 파티션을 사용하여이 셔플 및 정렬 프로세스를 최적화합니다. 적절한 배열 후,이 키 값은 원하는 클라이언트의 출력을 얻기 위해 감속기로 전달됩니다. 마지막으로 감속기가 원하는 출력을 얻습니다.

    K1, V1 -> K2, V2 (Mapper 프로그램 작성), -> K2, V '(여기에서 데이터를 부드럽게하고 부드럽게) -> K3, V3 출력을 생성하십시오. K4, V4.

    이 모든 단계는 논리적 인 작업 일 뿐이며 원래 데이터는 변경되지 않습니다.

    귀하의 질문 : Map Reduce Programming에서 감속기의 위상을 정렬하고 정렬하는 목적은 무엇입니까?

    짧은 대답 : 원하는 출력을 얻기 위해 데이터를 처리합니다. 셔플 링은 데이터를 집계하고 예상되는 출력을 줄입니다.

  10. from https://stackoverflow.com/questions/22141631/what-is-the-purpose-of-shuffling-and-sorting-phase-in-the-reducer-in-map-reduce by cc-by-sa and MIT license