[HADOOP] hadoop 맵에서 그룹 비교기를 사용하는 것은 무엇입니까 reduce
HADOOPhadoop 맵에서 그룹 비교기를 사용하는 것은 무엇입니까 reduce
필자는 비교기를 그룹핑하는 것이 mapreduce의 보조 정렬에 사용되는 이유를 알고 싶습니다.
2 차 정렬의 최종 가이드 예에 따르면
우리는 키의 정렬 순서를 연도 (오름차순)로, 그 다음으로 온도 (내림차순) :
1900 35°C
1900 34°C
1900 34°C
...
1901 36°C
1901 35°C
키의 1 년 단위로 파티셔닝하는 파티션을 설정함으로써, 우리는 같은 해의 기록은 같은 감속기로 간다. 이것은 여전히 우리의 목표 달성에 충분하지 않습니다. 그러나 목표. 분할자는 하나의 감속기가 년; 감속기가 파티션 내의 키로 그룹화된다는 사실은 변경되지 않습니다.
특정 출력 감속기로가는 맵 출력 키를 처리 할 자체 파타야를 이미 작성 했으므로 왜 그룹화해야합니까?
미리 감사드립니다.
해결법
-
==============================
1.선택한 답변을 뒷받침하기 위해 다음을 추가합니다.
선택한 답변을 뒷받침하기 위해 다음을 추가합니다.
이 설명에 이어
**Input**: symbol time price a 1 10 a 2 20 b 3 30 **Map output**: create composite key\values like so: > symbol-time time-price > >**a-1** 1-10 > >**a-2** 2-20 > >**b-3** 3-30
Partitioner : 키가 다르더라도 a-1 및 a-2 키를 동일한 감속기로 라우팅합니다. 또한 b-3를 별도의 감속기로 연결합니다.
GroupComparator : 복합 키 \ 값이 감속기 대신 감속기에 도착하면
>(**a-1**,{1-10}) > >(**a-2**,{2-20})
위의 것은 구성 후 고유 한 키 값으로 인해 발생합니다.
그룹 비교기는 감속기가 다음을 얻는 지 확인합니다.
(a-1,{**1-10,2-20**})
그룹화 된 값의 키는 그룹에서 처음 오는 값입니다. 이것은 키 비교기로 제어 할 수 있습니다.
**[[In a single reduce method call.]]**
-
==============================
2."특정 감속기로가는지도 출력 키를 관리하십시오"라는 문장을 개선하겠습니다.
"특정 감속기로가는지도 출력 키를 관리하십시오"라는 문장을 개선하겠습니다.
감속기 인스턴스 대 감소 방법 : 하나의 JVM이 Reduce 태스크마다 생성되며, 각각 하나의 Reducer 클래스 인스턴스가 있습니다. 이것은 Reducer 인스턴스입니다 (지금부터는 Reducer라고 부릅니다). 각 Reducer에서 reduce 메소드는 'key grouping'에 따라 여러 번 호출됩니다. reduce가 호출 될 때마다 'valuein'에는 'grouping comparator'에서 정의한 키로 그룹화 된 맵 출력 값 목록이 있습니다. 기본적으로 그룹화 비교자는 전체 맵 출력 키를 사용합니다.
이 예에서 맵 출력 키는 '연도 및 온도'로 변경되어 정렬됩니다. 맵 출력 키의 '연도'부분 만 사용하는 그룹 비교를 정의하지 않는 한 같은 해의 모든 레코드를 만들 수는 없습니다 동일한 메소드 호출로 간다.
-
==============================
3.연도와 온도의 합성 된 중간 키를 도입해야합니다. 파티션을 자연 키 (연도)에 적용하고 전체 복합 키를 정렬 할 비교자를 도입하십시오. 당신은 일년에 파티션을 나눠서 동일한 감속기에서 1 년간의 모든 데이터를 얻게되므로 비교기는 온도에 따라 매년 데이터를 효과적으로 분류 할 것입니다.
연도와 온도의 합성 된 중간 키를 도입해야합니다. 파티션을 자연 키 (연도)에 적용하고 전체 복합 키를 정렬 할 비교자를 도입하십시오. 당신은 일년에 파티션을 나눠서 동일한 감속기에서 1 년간의 모든 데이터를 얻게되므로 비교기는 온도에 따라 매년 데이터를 효과적으로 분류 할 것입니다.
-
==============================
4.기본 파티셔너는 키의 해시를 계산하고 동일한 해시 값을 가진 키는 동일한 감속기로 전송됩니다. 맵퍼에서 합성 키 (내추럴 + 오름차순)가 방출 된 경우 동일한 자연 키가있는 키를 동일한 감속기로 보내려면 사용자 정의 분할기를 구현해야합니다.
기본 파티셔너는 키의 해시를 계산하고 동일한 해시 값을 가진 키는 동일한 감속기로 전송됩니다. 맵퍼에서 합성 키 (내추럴 + 오름차순)가 방출 된 경우 동일한 자연 키가있는 키를 동일한 감속기로 보내려면 사용자 정의 분할기를 구현해야합니다.
public class SimplePartitioner implements Partitioner { @Override public int getPartition(Text compositeKey, LongWritable value, int numReduceTasks) { //Split the key into natural and augment String naturalKey = compositeKey.toString().split("separator") return naturalKey.hashCode(); }
}
이제 데이터 파티션 내의 모든 관련 행을 단일 감속기로 보내려면 자연 키만 고려하는 그룹 비교를 구현해야합니다
public class SimpleGroupingComparator extends WritableComparator { @Override public int compare(Text compositeKey1, Text compositeKey2) { return compare(compositeKey1.getNaturalKey(),compositeKey2.getNaturalKey()); }
}
from https://stackoverflow.com/questions/14728480/what-is-the-use-of-grouping-comparator-in-hadoop-map-reduce by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 돼지 라틴어 : 날짜 범위에서 여러 파일로드 (디렉토리 구조의 일부) (0) | 2019.05.30 |
---|---|
[HADOOP] Hadoop은 입력 분할을 어떻게 수행합니까? (0) | 2019.05.30 |
[HADOOP] Hadoop 프로그램의 매퍼에서 입력 파일 이름을 가져 오는 방법은 무엇입니까? (0) | 2019.05.30 |
[HADOOP] Hadoop 용 대규모 데이터 다운로드 [닫힘] (0) | 2019.05.30 |
[HADOOP] 익명 클래스의 NotSerializableException (0) | 2019.05.30 |