복붙노트

[HADOOP] 먼저 실행되는 것은 파티셔너 또는 결합기입니까?

HADOOP

먼저 실행되는 것은 파티셔너 또는 결합기입니까?

분할기와 결합기가 궁금합니다.

나는 그것이 partitiner first와 combiner이고 그런 다음 키는 다른 reducers로 방향이 바뀌었고, 파티셔너처럼 보이기 때문에 혼란 스럽다. 이해 좀 도와주세요.

해결법

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

    1.귀하의 질문에 대한 직접적인 대답은 => COMBINER입니다.

    귀하의 질문에 대한 직접적인 대답은 => COMBINER입니다.

    세부: 결합기는지도 단계에서 미니 감속기로 볼 수 있습니다. 그들은 mapper 결과가 더 많이 분산되기 전에 local-reduce를 수행합니다. Combiner 기능이 실행되면 추후 작업을 위해 Reducer로 전달됩니다.

    이므로

    분할기는 감속기보다 하나 더 작업 할 때 그림이됩니다. 따라서 파티셔너는 특정 감속기가 특정 키를 담당하는지 결정합니다. 그들은 기본적으로 Mapper Result (Combiner가 Combiner Result를 사용하는 경우)를 취하여 키를 기반으로 책임있는 Reducer로 보냅니다.

    더 나은 이해를 위해 다음 이미지를 참조 할 수 있습니다.이 이미지는 Hadoop의 Yahoo Developer Tutorial에서 가져 왔습니다.

    자습서가 있습니다.

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

    2.파티션이 먼저옵니다.

    파티션이 먼저옵니다.

    "Hadoop, 최종 가이드"에 따르면, Mapper의 출력은 메모리 버퍼에 먼저 기록되고 버퍼가 오버 플로우 될 때 로컬 디렉토리로 유출됩니다. 누출 데이터는 Partitioner에 따라 분리되며 각 파티션에서 Combiner가 제공된 경우 결과가 정렬되고 결합됩니다.

    단순히 단어 개수의 MR 프로그램을 수정하여 확인할 수 있습니다. 내 결과는 다음과 같습니다. ( "빠른 갈색 여우는 게으른 개로 뛰어 올랐다")

    단어, 스텝, 시간

    여우, 매퍼, ********** 754

    폭스, Partitioner, ********** 754

    폭스, Combiner, ********** 850

    여우, 감속기, ********** 904

    분명히, Combiner는 Partitioner 후에 실행됩니다.

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

    3.Partitioner는 Combiner : MapReduce 종합 다이어그램보다 먼저 실행됩니다.

    Partitioner는 Combiner : MapReduce 종합 다이어그램보다 먼저 실행됩니다.

    사용자 정의 파티션 논리를 가질 수 있으며, 매퍼 결과가 분할 된 후에는 파티션이 정렬되고 Combiner가 정렬 된 파티션에 적용됩니다.

    Hadoop MapReduce 종합 설명을 참조하십시오.

    로깅 타임 스탬프와 함께 사용자 지정 Combiner 및 Partitioner를 사용하여 단어 수 프로그램을 실행하여 검사했습니다.

    Apr 23, 2018 2:41:22 PM mapreduce.WordCountPartitioner getPartition
    INFO: Partitioner: 1524483682580 : hello : 1
    Apr 23, 2018 2:41:22 PM mapreduce.WordCountPartitioner getPartition
    INFO: Partitioner: 1524483682582 : hello : 1
    Apr 23, 2018 2:41:22 PM mapreduce.WordCountPartitioner getPartition
    INFO: Partitioner: 1524483682583 : hello : 1
    Apr 23, 2018 2:41:22 PM mapreduce.WordCountPartitioner getPartition
    INFO: Partitioner: 1524483682583 : world : 1
    Apr 23, 2018 2:41:22 PM mapreduce.WordCountPartitioner getPartition
    INFO: Partitioner: 1524483682584 : world : 1
    Apr 23, 2018 2:41:22 PM mapreduce.WordCountPartitioner getPartition
    INFO: Partitioner: 1524483682585 : hello : 1
    Apr 23, 2018 2:41:22 PM mapreduce.WordCountPartitioner getPartition
    INFO: Partitioner: 1524483682585 : world : 1
    18/04/23 14:41:22 INFO mapred.LocalJobRunner: 
    18/04/23 14:41:22 INFO mapred.MapTask: Starting flush of map output
    18/04/23 14:41:22 INFO mapred.MapTask: Spilling map output
    18/04/23 14:41:22 INFO mapred.MapTask: bufstart = 0; bufend = 107; bufvoid = 104857600
    18/04/23 14:41:22 INFO mapred.MapTask: kvstart = 26214396(104857584); kvend = 26214368(104857472); length = 29/6553600
    Apr 23, 2018 2:41:22 PM mapreduce.WordCountCombiner reduce
    INFO: Combiner: 1524483682614 : hello 
    Apr 23, 2018 2:41:22 PM mapreduce.WordCountCombiner reduce
    INFO: Combiner: 1524483682615 : world
    
  4. ==============================

    4.분할기 이전에 결합기가 실행됩니다.

    분할기 이전에 결합기가 실행됩니다.

    combiner는 맵 출력 후 항목 수를 줄이기 위해 맵 이후에 실행됩니다. 따라서 네트워크 과부하가 줄어 듭니다. 파티션 후에 실행 줄이기

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

    5.Combiner는지도 측 감속기입니다. 감속기가 결합기로 수행 한 모든 작업을 의미합니다. 결합기의 주요 용도는 성능을 최적화 / 최적화하는 것입니다. 결합기가 코드를 최적화 한 후, 청원 자 (petitioner)는 분리되어 여러 출력을 얻습니다. Combiner는 선택 사항이지만 대용량 파일의 경우 매우 유용합니다.

    Combiner는지도 측 감속기입니다. 감속기가 결합기로 수행 한 모든 작업을 의미합니다. 결합기의 주요 용도는 성능을 최적화 / 최적화하는 것입니다. 결합기가 코드를 최적화 한 후, 청원 자 (petitioner)는 분리되어 여러 출력을 얻습니다. Combiner는 선택 사항이지만 대용량 파일의 경우 매우 유용합니다.

    분할기는 감속기의 수에 따라 데이터를 나누고 요구 사항에 따라 출력을 나눕니다. 예 : 출력 남성, 여성, 분할자를 사용하여 2 개의 출력을 분리합니다.

    첫 번째 콤비네이션이 올 것이고 Partitioner가 올 것입니다. 둘 다 Mapside에만 있지만 감속기에는 없습니다.

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

    6.하둡 - 최종 가이드 제 3 판, 209 페이지에 우리는 다음과 같은 말을 사용합니다.

    하둡 - 최종 가이드 제 3 판, 209 페이지에 우리는 다음과 같은 말을 사용합니다.

    그래서 대답은 다음과 같습니다.

    Map -> Partitioner -> Sort -> Combiner -> Spill -> Combiner (누출> = 3 인 경우) -> Merge.

    그러나 Apache 튜토리얼에는 다음과 같은 단어가 있습니다.

    내용은 최종 가이드와 다릅니다. 여기에 대한 대답은 다음과 같습니다.

    맵 -> 정렬 -> 결합기 -> 분할기 -> 유출 -> 결합 자 (유출> = 3 인 경우) -> 병합.

    어느 것이 옳은가요? 나는 아파치 튜토리얼에서 나중에 하나를 받아 들일 의향이 있지만 아주 확실하지 않다.

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

    7.Combiner는 출력 맵 태스크의 키 값 쌍을 변경하지 않습니다. 동일한 키를 기반으로 결합되어 동일한 키 / 목록 값 쌍을 내 보냅니다.

    Combiner는 출력 맵 태스크의 키 값 쌍을 변경하지 않습니다. 동일한 키를 기반으로 결합되어 동일한 키 / 목록 값 쌍을 내 보냅니다.

    분할 자 (Partitioner)는 맵 / 결합 자 (존재하는 경우)에서 입력을 취한 다음 데이터를 세그먼트 화하여 프로세스에서 새로운 K 목록 값 쌍을 방출 할 수 있습니다.

    그래서 Map -> Combine -> Partition -> Reduce를 선택합니다.

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

    8.매퍼 -> 결합기 -> 파티션 -> 감속기

    매퍼 -> 결합기 -> 파티션 -> 감속기

  9. from https://stackoverflow.com/questions/22061210/what-runs-first-the-partitioner-or-the-combiner by cc-by-sa and MIT license