[HADOOP] 먼저 실행되는 것은 파티셔너 또는 결합기입니까?
HADOOP먼저 실행되는 것은 파티셔너 또는 결합기입니까?
분할기와 결합기가 궁금합니다.
나는 그것이 partitiner first와 combiner이고 그런 다음 키는 다른 reducers로 방향이 바뀌었고, 파티셔너처럼 보이기 때문에 혼란 스럽다. 이해 좀 도와주세요.
해결법
-
==============================
1.귀하의 질문에 대한 직접적인 대답은 => COMBINER입니다.
귀하의 질문에 대한 직접적인 대답은 => COMBINER입니다.
세부: 결합기는지도 단계에서 미니 감속기로 볼 수 있습니다. 그들은 mapper 결과가 더 많이 분산되기 전에 local-reduce를 수행합니다. Combiner 기능이 실행되면 추후 작업을 위해 Reducer로 전달됩니다.
이므로
분할기는 감속기보다 하나 더 작업 할 때 그림이됩니다. 따라서 파티셔너는 특정 감속기가 특정 키를 담당하는지 결정합니다. 그들은 기본적으로 Mapper Result (Combiner가 Combiner Result를 사용하는 경우)를 취하여 키를 기반으로 책임있는 Reducer로 보냅니다.
더 나은 이해를 위해 다음 이미지를 참조 할 수 있습니다.이 이미지는 Hadoop의 Yahoo Developer Tutorial에서 가져 왔습니다.
자습서가 있습니다.
-
==============================
2.파티션이 먼저옵니다.
파티션이 먼저옵니다.
"Hadoop, 최종 가이드"에 따르면, Mapper의 출력은 메모리 버퍼에 먼저 기록되고 버퍼가 오버 플로우 될 때 로컬 디렉토리로 유출됩니다. 누출 데이터는 Partitioner에 따라 분리되며 각 파티션에서 Combiner가 제공된 경우 결과가 정렬되고 결합됩니다.
단순히 단어 개수의 MR 프로그램을 수정하여 확인할 수 있습니다. 내 결과는 다음과 같습니다. ( "빠른 갈색 여우는 게으른 개로 뛰어 올랐다")
단어, 스텝, 시간
여우, 매퍼, ********** 754
폭스, Partitioner, ********** 754
폭스, Combiner, ********** 850
여우, 감속기, ********** 904
분명히, Combiner는 Partitioner 후에 실행됩니다.
-
==============================
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.분할기 이전에 결합기가 실행됩니다.
분할기 이전에 결합기가 실행됩니다.
combiner는 맵 출력 후 항목 수를 줄이기 위해 맵 이후에 실행됩니다. 따라서 네트워크 과부하가 줄어 듭니다. 파티션 후에 실행 줄이기
-
==============================
5.Combiner는지도 측 감속기입니다. 감속기가 결합기로 수행 한 모든 작업을 의미합니다. 결합기의 주요 용도는 성능을 최적화 / 최적화하는 것입니다. 결합기가 코드를 최적화 한 후, 청원 자 (petitioner)는 분리되어 여러 출력을 얻습니다. Combiner는 선택 사항이지만 대용량 파일의 경우 매우 유용합니다.
Combiner는지도 측 감속기입니다. 감속기가 결합기로 수행 한 모든 작업을 의미합니다. 결합기의 주요 용도는 성능을 최적화 / 최적화하는 것입니다. 결합기가 코드를 최적화 한 후, 청원 자 (petitioner)는 분리되어 여러 출력을 얻습니다. Combiner는 선택 사항이지만 대용량 파일의 경우 매우 유용합니다.
분할기는 감속기의 수에 따라 데이터를 나누고 요구 사항에 따라 출력을 나눕니다. 예 : 출력 남성, 여성, 분할자를 사용하여 2 개의 출력을 분리합니다.
첫 번째 콤비네이션이 올 것이고 Partitioner가 올 것입니다. 둘 다 Mapside에만 있지만 감속기에는 없습니다.
-
==============================
6.하둡 - 최종 가이드 제 3 판, 209 페이지에 우리는 다음과 같은 말을 사용합니다.
하둡 - 최종 가이드 제 3 판, 209 페이지에 우리는 다음과 같은 말을 사용합니다.
그래서 대답은 다음과 같습니다.
Map -> Partitioner -> Sort -> Combiner -> Spill -> Combiner (누출> = 3 인 경우) -> Merge.
그러나 Apache 튜토리얼에는 다음과 같은 단어가 있습니다.
내용은 최종 가이드와 다릅니다. 여기에 대한 대답은 다음과 같습니다.
맵 -> 정렬 -> 결합기 -> 분할기 -> 유출 -> 결합 자 (유출> = 3 인 경우) -> 병합.
어느 것이 옳은가요? 나는 아파치 튜토리얼에서 나중에 하나를 받아 들일 의향이 있지만 아주 확실하지 않다.
-
==============================
7.Combiner는 출력 맵 태스크의 키 값 쌍을 변경하지 않습니다. 동일한 키를 기반으로 결합되어 동일한 키 / 목록 값 쌍을 내 보냅니다.
Combiner는 출력 맵 태스크의 키 값 쌍을 변경하지 않습니다. 동일한 키를 기반으로 결합되어 동일한 키 / 목록 값 쌍을 내 보냅니다.
분할 자 (Partitioner)는 맵 / 결합 자 (존재하는 경우)에서 입력을 취한 다음 데이터를 세그먼트 화하여 프로세스에서 새로운 K 목록 값 쌍을 방출 할 수 있습니다.
그래서 Map -> Combine -> Partition -> Reduce를 선택합니다.
-
==============================
8.매퍼 -> 결합기 -> 파티션 -> 감속기
매퍼 -> 결합기 -> 파티션 -> 감속기
from https://stackoverflow.com/questions/22061210/what-runs-first-the-partitioner-or-the-combiner by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] RDD가 아닌 Spark 프로그램에서 일반 텍스트 HDFS (또는 로컬) 파일을 쓸 수 있습니까? (0) | 2019.06.15 |
---|---|
[HADOOP] (하둡) MapReduce - 체인 작업 - JobControl이 멈추지 않습니다 (0) | 2019.06.15 |
[HADOOP] MapReduceBase 및 Mapper가 더 이상 사용되지 않습니다. (0) | 2019.06.15 |
[HADOOP] Flume 설정을 테스트하기 위해 HTTP 소스를 설정하는 방법은 무엇입니까? (0) | 2019.06.15 |
[HADOOP] Select Count (*)가 Select *보다 느린 이유는 하이브입니다. (0) | 2019.06.15 |