복붙노트

[HADOOP] hadoop 맵에서 그룹 비교기를 사용하는 것은 무엇입니까 reduce

HADOOP

hadoop 맵에서 그룹 비교기를 사용하는 것은 무엇입니까 reduce

필자는 비교기를 그룹핑하는 것이 mapreduce의 보조 정렬에 사용되는 이유를 알고 싶습니다.

2 차 정렬의 최종 가이드 예에 따르면

우리는 키의 정렬 순서를 연도 (오름차순)로, 그 다음으로 온도 (내림차순) :

1900 35°C
1900 34°C
1900 34°C
...
1901 36°C
1901 35°C

키의 1 년 단위로 파티셔닝하는 파티션을 설정함으로써, 우리는 같은 해의 기록은 같은 감속기로 간다. 이것은 여전히 ​​우리의 목표 달성에 충분하지 않습니다. 그러나 목표. 분할자는 하나의 감속기가 년; 감속기가 파티션 내의 키로 그룹화된다는 사실은 변경되지 않습니다.

특정 출력 감속기로가는 맵 출력 키를 처리 할 자체 파타야를 이미 작성 했으므로 왜 그룹화해야합니까?

미리 감사드립니다.

해결법

  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. ==============================

    2."특정 감속기로가는지도 출력 키를 관리하십시오"라는 문장을 개선하겠습니다.

    "특정 감속기로가는지도 출력 키를 관리하십시오"라는 문장을 개선하겠습니다.

    감속기 인스턴스 대 감소 방법 : 하나의 JVM이 Reduce 태스크마다 생성되며, 각각 하나의 Reducer 클래스 인스턴스가 있습니다. 이것은 Reducer 인스턴스입니다 (지금부터는 Reducer라고 부릅니다). 각 Reducer에서 reduce 메소드는 'key grouping'에 따라 여러 번 호출됩니다. reduce가 호출 될 때마다 'valuein'에는 'grouping comparator'에서 정의한 키로 그룹화 된 맵 출력 값 목록이 있습니다. 기본적으로 그룹화 비교자는 전체 맵 출력 키를 사용합니다.

    이 예에서 맵 출력 키는 '연도 및 온도'로 변경되어 정렬됩니다. 맵 출력 키의 '연도'부분 만 사용하는 그룹 비교를 정의하지 않는 한 같은 해의 모든 레코드를 만들 수는 없습니다 동일한 메소드 호출로 간다.

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

    3.연도와 온도의 합성 된 중간 키를 도입해야합니다. 파티션을 자연 키 (연도)에 적용하고 전체 복합 키를 정렬 할 비교자를 도입하십시오. 당신은 일년에 파티션을 나눠서 동일한 감속기에서 1 년간의 모든 데이터를 얻게되므로 비교기는 온도에 따라 매년 데이터를 효과적으로 분류 할 것입니다.

    연도와 온도의 합성 된 중간 키를 도입해야합니다. 파티션을 자연 키 (연도)에 적용하고 전체 복합 키를 정렬 할 비교자를 도입하십시오. 당신은 일년에 파티션을 나눠서 동일한 감속기에서 1 년간의 모든 데이터를 얻게되므로 비교기는 온도에 따라 매년 데이터를 효과적으로 분류 할 것입니다.

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

    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());
    }
    

    }

  5. from https://stackoverflow.com/questions/14728480/what-is-the-use-of-grouping-comparator-in-hadoop-map-reduce by cc-by-sa and MIT license