Hadoop 파티셔너에 대해 물어보고 싶습니다. Mappers에서 구현 되었습니까? 기본 해시 분할자를 사용하여 성능을 측정하는 방법 - 데이터 왜곡을 줄이는 데 더 나은 분할자가 있습니까?Hadoop partitioner
감사합니다.
Hadoop 파티셔너에 대해 물어보고 싶습니다. Mappers에서 구현 되었습니까? 기본 해시 분할자를 사용하여 성능을 측정하는 방법 - 데이터 왜곡을 줄이는 데 더 나은 분할자가 있습니까?Hadoop partitioner
감사합니다.
파티션이 매퍼에 없습니다.
각 매퍼에서 발생하는 프로세스이다. 버퍼가 임계 값에 도달하면 백그라운드 스레드가 내용을 디스크에 유출하기 시작합니다. [버퍼 크기는 mapreduce.task.io.sort.mb 속성에 의해 규율됩니다. &의 기본값은 100MB이며 mapreduce.io.sort.spill.percent 속성에 의해 제어됩니다. &의 기본값은 0.08 또는 80 %입니다.] 디스크에 유출 전에 데이터는 & 전송을 작성하는 그들은 각 종류의 결과에
이 일어나는 과정 각 감속기
이제 각 감속기가 정렬로 이동, 각 매퍼에서 모든 파일을 수집/상 (일종의 이미 매퍼 측에서 수행)을 병합 정렬 순서를 유지하면서 모든 맵 출력을 병합합니다.
감축 단계에서 감소 된 기능이 정렬 된 출력의 각 키에 대해 호출됩니다. 이하
Partition keys by their hashCode().
public class HashPartitioner<K, V> extends Partitioner<K, V> {
public int getPartition(K key, V value,
int numReduceTasks) {
return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks;
}
}
Partitioner는 Mappers와 Reducers 사이의 핵심 구성 요소입니다. 그것은 방출 된지도를 Reducers 사이에 분배합니다.
파티션 작업자는 모든 맵 작업 JVM (Java 프로세스) 내에서 실행됩니다.
기본 분할 자 HashPartitioner
은 해시 기능을 기반으로 작동하며 TotalOrderPartitioner
과 같은 다른 분할 자와 비교할 때 매우 빠릅니다. 모든지도 출력 키에 대해 해시 함수를 실행합니다.:
Reduce_Number = (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks;
해시 파티셔너의 성능을 확인하려면 작업 카운터 줄이기를 사용하고 환원제가 배포판에서 어떻게 발생했는지 확인하십시오.
해시 파티션은 기본 파티셔이며 높은 왜곡이있는 데이터를 처리하는 데 적합하지 않습니다.
데이터 비대칭 문제를 해결하려면 MapReduce API에서 Partitioner.java
클래스를 확장하는 맞춤형 파티션 클래스를 작성해야합니다.
사용자 정의 분할 자의 예는 RandomPartitioner
입니다. 이것은 감속기 사이에 기울어 진 데이터를 고르게 분배하는 가장 좋은 방법 중 하나입니다.